Node.js-Express(2)有关路由和中间件

~

  • 路由
    • 初识路由
      • 1.什么是路由
      • 2.express中的路由
      • 3.最简单的用法
      • 4.路由模块化
        • 创建路由模块
        • 注册路由模块
  • 中间件
    • 初识中间件
      • 1.什么是中间件
      • 2.express中间件格式
      • 3.全局中间件
        • 全局中间件的简化形式
      • 4.局部中间件
      • 5.使用中间件的注意事项
  • 总结

路由

初识路由

1.什么是路由

路由是指分组从源到目的地时,决定端到端路径的网络范围的进程。广义上来讲,路由就是映射关系。在生活中很常见的路由就比如,电信给你打电话,然后让你输入数字来选择你需要办理什么业务~在这里,按键服务之间的映射关系就是路由

2.express中的路由

在express中路由是指客户端的请求服务区处理函数之间的映射关系~~
在express中路由有三个部分组成,分别是请求类型,请求的URL地址和处理函数,格式如下

app.method(path,handler)

举个栗子吧~

//匹配get请求,且请求的URL为'/'
app.get('/',(req,res)=>{
    res.send('hello')
})

//匹配post请求,且请求的URL为'/'
app.post('/',(req,res)=>{
    res.send('hello i am post')
})

路由的匹配过程

  • 当一个请求到达服务器之后,需要先经过路由的匹配,只有当路由匹配成功过后,才会调用对应的处理函数
  • 在匹配时,会按照路由的顺序进行匹配,如果请求类型和请求的URL同时匹配成功,则express会将这次的请求,转交给相应的函数进行处理

3.最简单的用法

在express中最简单的使用路由的方法就是把路由挂载到app上,如下

举个栗子吧~

const express = require('express')
//创建Web服务器,命名为app
const app = express()

//挂载路由
app.get('/',(req,res)=>{
    res.send('hello!')
})

//启动服务器
app.listen(80,function(){
    console.log('server running at http://127.0.0.1')
})

Node.js-Express(2)有关路由和中间件_第1张图片

4.路由模块化

为了方便对路由进行管理,express不建议直接将路由挂载到app上,而是将路由抽离为单独的模块
步骤如下:

  1. 创建路由模块对应的.js文件
  2. 调用express,Router()函数创建路由对象
  3. 向路由对象挂载具体的路由
  4. 使用module.exports向外共享路由对象
  5. 使用app.use()函数注册路由模块

创建路由模块

router.js里的代码

//导入expres
const express = require('express')
//创建路由对象
const router = express.Router()

//挂载路由
router.get('/',(req,res)=>{
    res.send('这是用路由模块返回的信息')
})

//向外导出路由对象
module.exports = router 

注册路由模块

主文件的里的代码

const express = require('express')
//创建Web服务器,命名为app
const app = express()

//导入路由模块
const router = require('./csdnrouter')
//注册路由模块
app.use(router)


//启动服务器
app.listen(80,function(){
    console.log('server running at http://127.0.0.1')
})

注意~

  • app.use()函数的作用就是用来注册全局中间件
    (后面会讲解中间件是什么~)

Node.js-Express(2)有关路由和中间件_第2张图片

中间件

初识中间件

1.什么是中间件

中间件是基础软件的一大类,属于可复用软件的范畴。顾名思义,中间件处于操作系统软件与用户的应用软件的中间。特指业务流程的中间处理环节
Node.js-Express(2)有关路由和中间件_第3张图片

2.express中间件格式

const express = require('express')
const app = express()
app.get('/',function(req,res,next){
	next()
})

app.listen(80,()=>{
	...
})

注意~

  • get是请求方法
  • ‘/’是请求的URL地址
  • function()是处理函数
  • 中间件函数的形参列表中,必须包含next参数,而路由的处理函数中只有req和res

补充~

next()函数是实现多个中间件连续调用的关键,他表示把流转关系交给下一个中间件或者路由

3.全局中间件

全局中间件就是可以在客户端发起的任何请求,到达服务器之后,都会触发的中间件
通过调用app.(中间件函数),即可定义一个全局生效的中间件
举个栗子吧~

const express = require('express')
//创建Web服务器,命名为app
const app = express()
//导入路由模块
const router = require('./csdnrouter')
//定义一个最简单的中间件函数
const ab = function(req,res,next){
    console.log('这是一个简单的中间件')
    next()
}

//将a注册为全局生效的中间件
app.use(ab)
//注册路由模块
app.use(router)

//启动服务器
app.listen(80,function(){
    console.log('server running at http://127.0.0.1')
})

13
注意~

当服务器接受到请求之后,会先把请求交给ab函数去处理,所以会先打印 ‘这是一个简单的中间件’ 这句话,然后经过next()函数的作用,将请求转给下一个中间件或者路由,所有路由接收到了请求,打印出 ‘调用了这个路由’ 这句话

全局中间件的简化形式

直接将中间件函数写在app.use()中!!

app.use(function(req,res,next){
	console.log('这是一个简单的中间件函数')
	next()
})

4.局部中间件

不使用app.use()定义的中间件,叫做局部生效的中间件

const express = require('express')
const app = express()
const router = require('./csdnrouter')

const ab = function(req,res,next){
    console.log('创建局部中间件')
    next()
}
app.get('/get',ab,(req,res)=>{
    console.log('~~~')
    res.send("hello,这是局部中间件")
})
app.listen(80,function(){
    console.log('server running at http://127.0.0.1')
})

14
Node.js-Express(2)有关路由和中间件_第4张图片
注意~

  • ab中间件只会在URL地址为‘/get’的时候生效
  • ab中间件并不会影响到下面的中间件或者路由

5.使用中间件的注意事项

1️⃣ 一定要在路由之前注册中间件
2️⃣ 客户端发送过来的请求,可以连续调用多个中间件进行处理
3️⃣ 执行完中间件的业务代码之后,不要忘记调用next()函数
4️⃣ 为了防止代码逻辑混乱,调用next()函数之后,不要再另外写代码
5️⃣ 连续调用多个中间件的时候,多个中间件之间可以共享req和res对象

总结

✨以上就是一些关于Node.js里关于express中路由和中间件的一些非常基础的内容,由个人结合资料并总结,后期还会继续进行总结。如果内容有错误,希望可以予以指出和批评!我一定会接受大家的批评并吸取经验,及时的做出改正!!!✨

你可能感兴趣的:(Node.js,node.js,express,中间件)