Node.js笔记(二)

Node.js笔记(二)
1.Express 路由
路由就是客户端的请求和服务器处理函数之间的映射关系。
Express中的路由由3部分组成:请求类型、请求URL地址、处理函数,格式:
app.Method(Path,Handler)
2.模块化路由
为了方便对路由进行模块化管理,Express不建议将路由直接挂载到app上,而是推荐将路由抽离为单独的模块,将路由抽离为单独的模块的具体步骤如下:

  1. 创建路由模块对应的.js文件
  2. 调用express.Router()函数创建路由对象
  3. 向理由对象上挂载具体的路由
  4. 使用module.exports()向外共享路由对象
  5. 使用app.use()函数注册路由模块
    在这里插入图片描述


express中间件,本质上就是一个function处理函数。但是中间件的处理函数function必须包含next参数,且next参数只能放在最后,即:

router.get('/',function(req,res,next){
    next()
})

而路由处理函数function,只有req,res两个参数

function(req,res){
}

所以区分中间件和路由处理函数,就是通过function的参数来区分,如果有next参数,就是中间件,如果只有req,res参数,就是路由处理函数。
next函数是实现多个中间件连续调用的关键,中间件1调用next(),传给中间件2,以此类推给中间件N,处理完毕,响应请求。
全局生效中间件
客户端发起的任何请求,到达服务器之后,都会触发的中间件,叫做全局生效中间件。
通过调用app.use(中间件函数),即可定义一个全局生效的中间件,实例代码如下:
在这里插入图片描述
中间件的作用
多个中间件之间,共享同一份req和res,基于这样的特性,我们可以在上游的中间件中,统一为req或res对象添加自定义属性或者方法,供下游的中间件或者路由去使用。
app.use()可以连续定义多个全局中间件,当客户端的请求到达中间件之后,会按照中间件的定义顺序来执行。
局部生效中间件
不使用app.use()定义的中间件,叫做局部生效中间件
也可以使用多个局部中间件

在这里插入代码片
const express=require('express')
const app=express()
//定义局部中间件
const m1=function(req,res,next){
  console.log('这是第一个局部生效中间件')
  next()
}
const m2=function(req,res,next){
  console.log('这是第二个局部生效中间件')
  next()
}
app.get('/,m1,m2,(req,res)=>{
  res.send('Home page')
})
app.get('/user',(req,res)=>{
  res.send('use page')
})
app.listen(8080,()=>{
  console.log('express serhver running at http://127.0.0.1:8080)
})

这个时候启动服务器以后,当使用http://127.0.0.1:8080/发送get请求后,控制台会打印出:
这是第一个局部生效中间件
这是第二个局部生效中间件
而使用http://127.0.0.1:8080/user发送请求,控制台不会打印上面的结果。
中间件使用的注意事项:

  1. 一定要在路由之前注册中间件
  2. 客户端发送过来的请求,可以连续调用多个中间件进行处理
  3. 执行完中间件的业务代码以后,一定记住调用next()函数
  4. 为了防止代码逻辑混乱,调用next()函数以后,不要再写额外的代码,也就是说next()函数放在中间件代码段的最后
  5. 连续调用多个中间件时,多个中间件之间,共享req和res对象
    中间件的分类
    绑定到app实例app.use()上的中间件叫做应用级别的中间件
    绑定到路由express.Router()实例上的中间件叫做路由中间件
    错误级别的中间件的作用:专门用来捕获整个项目中发生的异常错误,从而防止项目异常崩溃的问题。
    格式:错误级别中间件的function处理函数中,必须有4个形参,形参顺序从前到后,分别是(err,req,res,next),错误级别的中间件必须注册在所有路由之后!!!
app.get('/',(req,res)=>{
  throw new Error('服务器内部发生了错误')
  res.send(''Home page)
})
//定义错误级别的中间件
app.use((err,req,res,next)=>{
  console.log('发生了错误'+err.message)
  res.send(err.message)res.send(err.message)
})

express.json来解析json格式的请求体数据
express.urlencoded()这个中间件来解析表单中url-encoded格式的数据
使用第三方插件 body-parser来解析请求体数据

  1. npm i body-parser安装中间件
  2. 使用require导入中间件
  3. 调用app.use()注册并使用中间件
    express内置的express.urlencoded({extended:false})中间件就是基于第三方中间件body-parser的基础上进一步封装出来的
    自定义中间件
const express = require('express')
const qs = require('querystring')
const bodyParser = (req, res, next) => {
    let str = ''
    req.on('data', (chunk) => {
        str += chunk
    })
    req.on('end', () => {
        const body = qs.parse(str)
        req.body = body
        next()

    })

}
module.exports = bodyParser
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值