Node.js中Router的使用

文章目录

    • 介绍
    • router的优点
    • 1.导入Express和创建Router:
    • 2. 定义路由:
    • 3.将router暴露到模块外:
    • 4. 将Router挂载到Express应用中:
      • 4.1.引入router
      • 4.2.使用中间件让router在Express应用中生效(三种写法)
    • 5. 完整示例:
      • 5.1.编写router的文件并将其暴露到模块外
      • 5.2.将router引入并在express中注册
    • 6.为什么注册router的时候,在router前要加一个路径区分
      • 注册router的两种写法
        • app.use(router)
        • require("/自定义路径", router)

介绍

在Node.js中,Router是Express框架提供的一种用于组织路由的方式,是express中创建的一个对象专门用于放置路由文件,通过module.exports导出供外部使用。router实际上是一个中间件,我们可以把在它身上绑定各种路由以及其他的中间件。通过使用Router,你可以将相关的路由组织在一起,从而更好地管理你的应用程序的路由。下面是关于如何在Node.js中使用Router的基本方法:

router的优点

通过使用Router,我们可以更好地组织路由,并使代码更加清晰和易于维护。

1.导入Express和创建Router:

首先,你需要导入Express模块并创建一个Router实例。这样可以让你在其中定义你的路由。

//引入express
const express = require('express');
//创建router对象
const router = express.Router();

2. 定义路由:

Router实例上定义你的路由。你可以使用router.get()router.post()router.put()等方法来定义相应的HTTP动词的路由。

router.get('/aaa', (req, res) => {res.send('这是根路由的GET请求');
})

3.将router暴露到模块外:

module.exports = router

4. 将Router挂载到Express应用中:

一旦你定义了路由,你需要将Router实例挂载到Express应用中。这样,Express就能够识别并处理来自这些路由的请求。

4.1.引入router

4.2.使用中间件让router在Express应用中生效(三种写法)

//引入routerconst userRouter = require("./routes/user")const goodsRouter = require("./routes/goods")//使路由生效//简易写法(容易混淆,不常用)app.use(userRouter)app.use(goodsRouter)//升级写法app.use("/user", userRouter)app.use("/goods", goodsRouter)解释一下:userRouter前面这个路径是为了解决不同的router里面出现相同的请求地址的问题。前面加个/user路径,代表它给userRouter里面所有的路由请求都加了一个/user的前缀//或app.use("/user", require("./routes/user"))app.use("/goods", require("./routes/goods"))

5. 完整示例:

下面是一个完整的示例,演示了如何在Node.js中使用Router
创建router

5.1.编写router的文件并将其暴露到模块外

在这里插入图片描述在这里插入图片描述

  • goods.js
const express = require("express")// 创建router对象
const router = express.Router()router.get("/list", (req, res) => {res.send("hello 我是商品的hello路由")
})// 将router暴露到模块外
module.exports = router
  • user.js
const express = require("express")// 创建router对象
const router = express.Router()router.get("/list", (req, res) => {res.send("hello 我是list")
})// 将router暴露到模块外
module.exports = router

5.2.将router引入并在express中注册

这里我在index.js中注册
在这里插入图片描述

const express = require("express")
const path = require("path")
const app = express()
const cookieParser = require("cookie-parser")
//引入router
const userRouter = require("./routes/user")
const goodsRouter = require("./routes/goods")
app.set("view engine", "ejs")
app.set("views", path.resolve(__dirname, "views"))
app.use(express.static(path.resolve(__dirname, "public")))
app.use(express.urlencoded({ extended: true }))
app.use(cookieParser())
//使路由生效
app.use("/user", userRouter)
app.use("/goods", goodsRouter)app.use((req, res) => {res.status(404).send("<h1>您访问的页面不存在</h1>")
})app.listen(3000, () => {console.log("服务器已经启动!")
})

在这个示例中,我们创建了一个Express应用,新建了一个文件存储我们定义的Router路由,并将定义好的Router`注册到express应用中。

6.为什么注册router的时候,在router前要加一个路径区分

注册router的两种写法

app.use(router)
require(“/自定义路径”, router)

解释:userRouter前面这个路径是为了解决不同的router里面出现相同的请求地址的问题。
前面加个/user路径,代表它给userRouter里面所有的路由请求都加了一个/user的前缀
在这里插入图片描述
在这里插入图片描述
将它俩同时引入注册
在这里插入图片描述
这个时候我们再访问localhost:3000/list的时候,哪个会执行?
答案是userRouter里面的localhost:3000/list会执行,因为它所属的router先在express中生效,所以为了避免这种情况,我们在router路由前面都加上一个前缀,访问的时候就不会混淆了。

app.use("/user", userRouter)
app.use("/goods", goodsRouter)

如此一来,
要访问userRouter里面的list就用localhost:3000/user/list
要访问goodsRouter里面的list就用localhost:3000/goods/list
需要注意的是,我们在router里面编写路由的时候是不需要加前缀的,我们访问的时候加上前缀就可以了,重定向的时候也要加前缀(只要涉及到向服务器发送请求的时候都要使用带前缀的完整路径

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/578900.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端三剑客 —— HTML (上)

前端 前端是什么&#xff1f; 把我们的数据以各种方式&#xff08;如&#xff1a;表格、饼图、柱状图等&#xff09;呈现给用户&#xff0c;我们就可以称之为前端。 做前端需要的工具&#xff1f; notepad、editplus、notepad、VS code、webstorm等&#xff0c;一般用于前端开…

FFmpeg将绿幕视频处理成透明视频播放

怎么在网页端插入透明视频呢&#xff0c;之前在做Web3D项目时&#xff0c;使用threejs可以使绿幕视频透明显示在三维场景中&#xff0c;但是在网页端怎么让绿幕视频透明显示呢&#xff1f; 如图上图&#xff0c;视频背景遮挡住后面网页内容 想要如下图效果 之前有使用过ffmpeg…

想做跨境电商测评自养号需要满足什么条件?

测评对于卖家来说算是一种低成本&#xff0c;高回报的推广营销方式&#xff0c;对于商品流量&#xff0c;转化率&#xff0c;关键词质量分&#xff0c;链接权重等都起到了一定的辅助作用&#xff0c;但凡事都有好坏&#xff0c;倘若处理不得当&#xff0c;很容易影响店铺&#…

通过InoDriverShop伺服调试软件连接汇川SV660F系列伺服的具体方法示例

通过InoDriverShop伺服调试软件连接汇川SV660F系列伺服的具体方法示例 具体连接伺服驱动器的步骤可参考以下内容: 启动InoDriverShop,新建或打开工程

[C++初阶] 爱上C++ : 与C++的第一次约会

&#x1f525;个人主页&#xff1a;guoguoqiang &#x1f525;专栏&#xff1a;我与C的爱恋 本篇内容带大家浅浅的了解一下C中的命名空间。 在c中&#xff0c;名称&#xff08;name&#xff09;可以是符号常量、变量、函数、结构、枚举、类和对象等等。工程越大&#xff0c;名称…

什么是缓冲区溢出攻击?

缓冲区是内存存储区域&#xff0c;在数据从一个位置传输到另一个位置时临时保存数据。当数据量超过内存缓冲区的存储容量时&#xff0c;就会发生缓冲区溢出&#xff08;或buffer overrun&#xff09;。结果&#xff0c;试图将数据写入缓冲区的程序会覆盖相邻的内存位置。 例如…

【论文通读】UFO:A UI-Focused Agent for Windows OS Interaction

UFO&#xff1a;A UI-Focused Agent for Windows OS Interaction 前言AbstractMotivationMethodsExperimentConclusion 前言 Windows客户端第一个JARVIS&#xff0c;利用GPT4 Vision识别截图信息辅助智能体自动化执行操作&#xff0c;作为微软大肆宣传的一篇工作&#xff0c;其…

学习笔记——C语言基本概念指针(上)——(7)

今天学习了指针&#xff0c;指针吧理解有点小难&#xff0c;慢慢分析就懂。 在开始学指针之前先回顾一下C语言的数据类型如下图所示: 按照分类分别为&#xff1a; 1->基础数据类型&#xff1a;char &#xff1b;short&#xff1b; int&#xff1b; long&#xff1b; float&…

【数据结构】树tree

树的遍历 广度遍历Breadth-first traversal Breadth-first traversal is the traversal strategy used in the binary tree.Breadth first traversal, also known as level order traversal is the traversal strategy used in a binary tree. It involves visiting all the …

短视频矩阵系统---开发源头交付

短视频矩阵系统---开发源头交付 短视频矩阵系统的核心开发步骤包括以下几个方面&#xff1a; 1. 系统设计&#xff1a;根据需求分析&#xff0c;设计出相应的系统架构&#xff0c;包括数据库设计、系统功能模块设计等。 2. 开发基础功能&#xff1a;基础功能包括短视频的上传、…

el-select的错误提示不生效、el-select验证失灵、el-select的blur规则失灵

发现问题 在使用el-select进行表单验证的时候&#xff0c;发现点击下拉列表没选的情况下&#xff0c;他不会提示没有选择选项的信息&#xff0c;我设置了rule如下 <!--el-select--><el-form-item label"等级" prop"level"><el-select v-m…

从供方协议管理到外部供方管理

从GJB 5000A的供方协议管理到GJB 5000B的外部供方管理&#xff0c;军用软件的研制对承接单位有了更高的标准和要求&#xff0c;也对外部供方管理有了更改的要求&#xff0c;让我们看看具体的变化吧&#xff01; 供方协议管理的目的&#xff1a; 管理供方产品的获取工作。 外部…