路由
- 我们要为路由提供请求的 URL 和其他需要的 GET 及 POST 参数,随后路由需要根据这些数据来执行相应的代码。因此,我们需要查看 HTTP 请求,从中提取出请求的 URL 以及 GET/POST 参数。
- 对于前端,主要是告诉浏览器应该找到哪个接口
- 对于后端,可以理解为一个个小的子服务,处理接口
routr 介绍
- 首先要创建路由文件
/routes/xx.js
- 创建路由
const router = express.Router()
- 路由处理响应
router.响应API(地址, 处理函数)
- 导出路由
module.exports = router
;
app.js主服务 - 安装路由
server.use('地址',router)
- 子路由里安装路由 嵌套
router.use('地址',子router)
- 截获当前路由下的部分公共业务
router.all('*',当前router路由下的验证工作)
//需要next 延续
主路由的地址对应子路由的根
如:server.js :/api/a~~ a.js:/`
server.use("/api/a",require("./routes/a.js"))
在a.js文件里面的/就是对应的app.js里面的/api/a的地址
程序代码
index.js
// 创建一个服务器
const express=require('express')
const server=express()
//监听端口
server.listen(3000)
//截获当前路由下的部分公共业务
server.all('*',(req,res,next)=>{
req.title='index.js'
next()
})
//主入口安装路由
server.use('/api/a',require('./routes/a'))
server.get('/reg',(req,res)=>{
res.send("reg "+req.title)//req.title index.js
})
//这段代码如果放在这里,那么之前的req.title 都是undefined
/*server.all('*',(req,res,next)=>{
req.title='index.js'
next()
})*/
a.js
// 1.创建路由
const express=require('express')
const router=express.Router()
//截获当前路由下的部分公共业务
//2.路由处理响应
// 相当于在响应接口/api/a 后面加路径
router.get('/',(req,res)=>{
res.send('这是a.js文件里的/api/a '+req.title)//req.title index.js
})
// 截取当前路由下的部分公共业务 与位置也有关系
//必须放在想要 截获 响应之前
router.all('*',(req,res,next)=>{
req.title='a.js'
next()
})
router.get('/b',(req,res)=>{
res.send('这是a.js文件里的/api/a/b '+req.title)//req.title a.js
})
//通过router.use的方法注册子路由
//当访问/apu/a/c 的时候 进入到c.js 里面 对应的回调函数
router.use('/c',require('./c'))
module.exports=router
b.js
//1.创建路由
const express=require('express')
const router=express.Router()
//截获当前路由下的部分公共业务
router.all('*',(req,res,next)=>{
req.title='c.js'
next()
})
// 2.路由处理响应
router.get('/',(req,res)=>{
res.send('这是c.js文件里的/api/a/c '+req.title)//req.title c.js
})
router.get('/d',(req,res)=>{
res.send('这是c.js文件里的/api/a/c/d '+req.title)//req.title c.js
})
router.get('/e',(req,res)=>{
res.send('这是c.js文件里的/api/a/c/e '+req.title)//req.title c.js
})
module.exports=router
运行
/reg
/api/a
/api/a/b
/api/a/c
/api/a/c/d
/api/a/c/e