Express 路由
路由:实际上就是映射关系
现实中的路由案例:打10086时候 有那些按键 按键1-------业务1 按键2------业务2
在这里:路由=按键与服务之间的映射关系
Express中的路由:是客户端的请求与服务器处理函数之间的映射关系
Express中的路由组成的三部分:
- 请求的类型
- 请求的URL地址
- 处理函数
——app.METHOD(PATH,HANDLER)
METHOD---请求类型(GET\POST)
PATH——请求的url地址(与客户端的相关)
HANDLER——处理函数,与之对应的处理函数(映射到服务器端的处理函数)
简单的路由1:get请求类型
app.get('/user',function(req,res){
res.send({"name":"zj","age":66,"gender":"男"} )
})
简单的路由1:post请求类型
app.post('/user',function(req,res){
res.send('post请求的响应')
})
路由的匹配过程
每一个请求到达服务器的时候,需要经过路由的匹配,匹配成功才会调用对应的处理函数
在匹配时,会按照路由的顺序进行匹配,如果请求类型和请求的URL同时匹配成功,则Express会将这次请求,转交给对应的function函数进行处理——客户端的请求会从上到下进行匹配路由
路由最简单的用法:将在服务器上挂载路由——实验案例
首先新建文件夹——然后运行npm init -y——初始化package.json文件
——然后在你的文件夹下安装需要的包-- npm i express
使用: nodemon .\最简单的路由服务器.js启动服务器
//导入express模块
const express=require('express')
//创建web服务器
const app=express()
//挂载路由
app.get('/',(req,res)=>{
res.send('处理函数 这是服务器给的 响应客户端的根url的get请求')
})
app.post('/',(req,res)=>{
res.send('处理函数 这是服务器给的 响应客户端的根url的post请求')
})
//启动服务器、使用80端口
app.listen(80,()=>{
console.log('http://127.0.0.1 启动成功')
})
但上述的挂载路由(直接挂载在APP上)的方式实际中不常用—— 导致代码量太多,不方便管理--使用路由模块化管理--将路由抽离为单独的模块
路由模块化创建
- 创建路由模块对应的.js文件——自定义的文件,专门用于挂载路由
- 调用express.Router()函数创建路由对象(路由的实例)——前面的时候:const app=express()返回的是app,服务器的实例
- 向路由实例对象上挂载具体的路由(原来是app上)
- 使用module.exports向外共享路由对象
- 使用app.use()注册路由模块
//导入express
const express=require('express')
//创建路由对象
const Router=express.Router()
//挂载具体路由
Router.get('/user/a',function(req,res){
res.send('GET USER A')
})
Router.post('/user/b',(req,res)=>{
res.send('POST USER B')
})
//向外导出路由
module.exports=Router//之前={对象 对象里面是属性 可以做一个省略}
路由模块的注册和使用
使用require导入路由模块,使用app.use(自定义路由模块)注册模块------让路由模块和服务器之间联系起来
原先使用express向外托管静态资源的时候使用过app.use(express.static('文件夹的路径'))
app.use()的作用:用来注册全局中间件--
//导入express
const express=require('express')
//创建路由对象
const Router=express.Router()
//挂载具体路由
Router.get('/user/a',function(req,res){
res.send('GET USER A')
})
Router.post('/user/b',(req,res)=>{
res.send('POST USER B')
})
//向外导出路由
module.exports=Router//之前={对象 对象里面是属性 可以做一个省略}
为路由模块添加统一的访问前缀——在前面托管静态资源的时候有使用过app.use(express.static('文件夹的路径'))------我们使用url访问静态资源的时候这个文件夹是不会出现在访问路径中——如果希望我们访问的时候有这个地址,我们需要在前面加上一个参数,app.use('/文件夹名字',express.static('文件夹的路径'))——相似
app.use('/api',router)------------在原先路由的访问url中全部加上了一个前缀