一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第7天,点击查看活动详情。
什么是路由
广义上讲,路由就是映射关系(对应关系)
Express 中的路由
-
在 Express 中,路由指的是客户端的请求与服务器处理函数之前的映射关系
-
Express 中的路由分为 3 部分组成,分别是 请求类型、请求的 URL 地址,处理函数,格式如下
// METHOD: 请求类型 // PATH: 请求的 URL 地址 // HANDLER: 处理函数 app.METHOD(PATH, HANDLER) -
示例
匹配 GET 请求,且请求 URL 为
/const express = require('express') const app = express() app.get('/', (req, res) => { res.send('请求成功') })匹配 POST 请求,且请求 URL 为
/const express = require('express') const app = express() app.post('/', (req, res) => { res.send('请求成功') })
路由的匹配过程
-
每当一个请求到达服务器之后,需要先经过路由的匹配,只有匹配成功之后,才会调用对应的处理函数
-
在匹配时,会按照路由的顺序进行匹配,如果请求类型和请求的 URL 同时匹配成功,则 Express 会将这次请求,转交给对应的 function 函数进行处理
-
路由匹配的注意点:
- 按照定义的先后顺序进行匹配
请求类型和请求的URL同时匹配成功,才会调用对应的处理函数
路由的使用
在 Express 中使用路由最简单的方式,就是把路由挂载到 app 上
const express = require('express')
const app = express()
app.get('/', (req, res) => {
res.send('请求成功')
})
app.post('/', (req, res) => {
res.send('请求成功')
})
app.listen(80, () => {
console.log('express 服务器运行在 http://127.0.0.1.80')
})
路由的模块化
- 实际开发中,如果有 100 个接口,全部挂载到 app 上,这个文件会非常的庞大。为了方便对路由进行模块化的管理, Express 不建议将路由直接挂载到 app 上,而是推荐奖路由抽离为单独的模块
- 将路由抽离为单独模块的步骤
-
创建路由模块对应的 js 文件
-
调用
express.Router()函数创建路由对象 -
向路由对象上挂载具体的路由
-
使用
module.exports向外共享路由对象 -
使用
app.use()函数注册路由模块
-
- 示例
-
创建路由模块
// 导入 express const express = require('express') // 创建路由对象 const router = express.Router() // 挂载获取用户列表的路由 router.get('/user/list', function(req,res){ res.send('用户列表') }) // 挂载添加用户的路由 router.post('/user/add', function(req,res){ res.send('创建用户') }) // 向外导出路由对象 module.exports = router -
注册路由模块
const express = require('express') const app = express() // 导入路由模块 const router = require('./user') // 注册路由模块 app.use(router) app.listen(80, ()=> { console.log('express 服务器运行在 http://127.0.0.1.80') }) -
请求地址
GET 请求 http://127.0.0.1/user/list POST 请求 http://127.0.0.1/user/add
-
为路由模块添加前缀
-
类似于托管静态资源时,为静态资源统一挂载访问前缀一样,格式如下
// 导入路由模块 const router = require('./user') // 使用 app.use() 注册路由模块,并添加统一的访问前缀 /api app.use('/api',router)添加
/api前缀后,那么访问 router 模块下的每一个路由都需要以/api开头 -
示例
请求地址
GET 请求 http://127.0.0.1/api/user/list POST 请求 http://127.0.0.1/api/user/add