参考
项目 | 描述 |
---|---|
哔哩哔哩 | 黑马程序员 |
搜索引擎 | Bing |
描述
项目 | 描述 |
---|---|
Edge | 109.0.1518.61 (正式版本) (64 位) |
NodeJS | v18.13.0 |
nodemon | 2.0.20 |
Express | 4.18.2 |
路由
在 Web 中,路由可以理解为 URL 与函数的映射关系。当一个请求从客户端发送到服务器端时,都需要与已定义的路由进行匹配,当匹配成功时将调用对应的回调函数以对客户端的请求进行响应。
路由匹配规则
URL 与路由匹配成功需要满足客户端发出的请求的请求类型及该请求所请求的路径均与路由相应的设置匹配成功。
举个栗子:
// 包含 NodeJS 第三方模块 express
const express = require('express');
// 创建服务器对象
const app = express();
// 监听本机 9090 端口
app.listen(9090);
// 建立路由
app.get('/', (req, res) => {
res.send('GET /');
});
app.get('/user', (req, res) => {
res.send('GET /user');
});
app.post('/user/RedHeart', (req, res) => {
res.send('POST /user/RedHeart');
});
注:
上述示例中,建立的路由将依次与如下类型的请求匹配成功:
- 客户端通过 GET 请求方式请求 127.0.0.1:9090/ 。
- 客户端通过 GET 请求方式请求 127.0.0.1:9090/user 。
- 客户端通过 POST 请求方式请求 127.0.0.1:9090/user/RedHeart 。
顺序匹配
请求的 URL 将与程序中建立建立的路由依次匹配,一旦匹配成功便停止匹配。
// 包含 NodeJS 第三方模块 express
const express = require('express');
const app = express();
// 监听本机 9090 端口
app.listen(9090);
// 建立路由
app.get('/', (req, res) => {
res.send('First');
});
app.get('/', (req, res) => {
res.send('Second');
});
执行结果:
模块化
Express 并不推荐向前面的示例那样直接将路由挂载到 express() 也即 app 上,而是推荐将路由单独抽离出来作为模块进行使用。
创建
首先我们需要创建一个 JavaScript 文件用于存放路由模块,并在该文件中添加如下内容以创建路由模块。
const express = require('express');
const router = express.Router();
// 创建路由
router.get('/', (req, res) => {
res.send('GET /');
})
router.get('/user', (req, res) => {
res.send('GET /user');
})
// 将路由进行导出
module.exports = router;
使用
// 导入 NodeJS 内置模块 path 用于拼接路径
const path = require('path');
// 导入位于当前工作目录下的路由模块
const router = require(path.join(__dirname, './navigator'));
// 导入 NodeJS 第三方模块 Express
const express = require('express');
const app = express();
// 监听本机的 9090 端口
app.listen(9090);
// 将导入的路由模块进行注册
app.use(router);
在对路由模块进行注册后,路由便开始正常工作了。
在本示例中,访问如下链接你将得到如下响应。
链接 | 响应 |
---|---|
127.0.0.1:9090/ | GET / |
127.0.0.1:9090/user | GET /user |
前缀
你可能希望为创建的路由添加一个统一的前缀,这里我们尝试为路由添加一个统一的前缀 RedHeart 。在此示例中,我们仅修改一行代码,其他内容与上一个示例无异。
将
app.use(router);
修改为
app.use('/RedHeart', router);
修改后,在本示例中,访问如下链接你将得到如下响应。
链接 | 响应 |
---|---|
127.0.0.1:9090/RedHeart | GET / |
127.0.0.1:9090/redheart/user | GET /user |
注:
在 URL 中是 不区分大小写 的,所以无论你访问的是 127.0.0.1:9090/RedHeart 还是 127.0.0.1:9090/redheart,得到的结果都是一样的。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/84010.html