IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> node.js——express中间件的学习与自定义 -> 正文阅读

[JavaScript知识库]node.js——express中间件的学习与自定义

1.什么是中间件

所谓的中间件(Middleware ),特指业务流程的中间处理环节

2.express 中间件的调用流程

客户端发送请求到express服务器,连续调用多个中间件进行预处理

3.express中间件的格式

express中间件本质就是一个function处理函数,格式如下:

//形参中必须包括next参数,而路由处理函数只包含req和res

app.get('path',function(req,res,next){

????????next()

}

4.next函数的作用

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

5.定义一个简单的中间件

//引入express
const express = require('express');
// 创建web服务器
const app = express();

//定义一个简单的中间件函数
const kw = (req,res,next) =>{
    cnsole.log('amazing~~~')
    //前一个流程的结果是下一个流程的开始
    next()
}

//启动服务器
apps.listen(8080,()=>{
    console.log('服务器启动于127.0.0.1:8080')
}

6.全局生效的中间件

全局生效的中间件:客户端发起的任何请求,都会触发的中间件

通过调用app.use(中间件函数)? ?可以连续设置多个全局中间件,会按照中间件定义的先后顺序依次执行

//引入express
const express = require('express');
//调用express服务器
const app = express();
//定义中间件函数
const mw = (req, res, next) => {
    console.log('调用第一个中间件');
    //调用中间件函数
    next()
}
//设置全局生效的中间件
app.use(mw);

//简化写法  
app.use((req, res, next) => {
    console.log('调用第二个中间件');
    //调用中间件函数
    next()
})


app.get('/', (req, res) => {
    console.log('调用了/这个路由');
    res.send('Home page')
})

app.get('/user', (req, res) => {
    console.log('调用了/user这个路由');
    res.send('User page')
})
//启动服务器
app.listen(8080, () => {
    console.log('running......');
})

7.局部生效的中间件

app.use()用来注册全局中间件,不能使用app.use()注册的中间件都是局部中间件

const express = require('express');
const app = express()
//不适用app.use()的都是局部中间件
const mt = (req, res, next) => {
    console.log('调用了局部生效中间件');
    next()
}
app.get('/', mt, (req, res) => {
    console.log('ok');
    res.send('Home Page')
})
app.get('/User', (req, res) => {
    console.log('ok');
    res.send('User Page')
})
启动服务器
app.listen(8080, () => {
    console.log('running...');
})

8.中间件的作用

可以使多个中间件,共享同一份 reqres?,

9.中间件的5个注意事项

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

10.中间件的分类

  • 应用级别中间件

通过 app.use()app.get()app.post() ,绑定到 app 实例上的中间件,叫做应用级别的中间件

  • 路由级别中间件

绑定到 express.Router() 实例上的中间件,叫做路由级别的中间件

  • 错误级别中间件

错误级别中间件的作用: 专门用来捕获整个项目中发生的异常错误,从而防止项目异常崩溃的问题

格式:错误级别中间件的 function 处理函数中,必须有 4 个形参,形参顺序从前到后,分别是(err, req, res, next)

// 1. 定义路由
app.get('/', (req, res) => {
  // 1. 抛出一个自定义的错误
  throw new Error('服务器内部发生了错误')

  res.send('Home Page.')
})

// 2. 错误级别的中间件
// 注意:错误级别的中间件,必须注册在所有路由之后
app.use((err, req, res, next) => {
  // 2.1 在服务器打印错误消息
  console.log('发生了错误:' + err.message)

  // 2.2 向客户端响应错误相关的内容 
  res.send(err.message)
})
  • express内置中间件

Express 内置了 3 个常用的中间件:

  1. express.static(托管静态资源中间件)
  2. express.json?(解析 JSON 格式的请求体数据)
  3. express.urlencoded(解析 URL-encoded 格式的请求体数据 )

注意:Express 内置的 express.urlencoded 中间件,就是基于 body-parser 这个第三方中间件进一步封装出来的

  • 第三方中间件

由第三方开发出来的中间件,可以按需下载并配置第三方中间件

11.自定义中间件

实现步骤:

  • 定义中间件

  • 监听 reqdata 事件

  • 监听 reqend 事件

  • 使用 querystring 模块解析请求体数据

  • 将解析出来的数据对象挂载为 req.body

  • 将自定义中间件封装为模块

// 引入 express
const express = require('express');
// 创建web服务器
const app = express();

// 使用 querystring 模块解析请求体数据
const qs = require('querydtring')

//定义全局生效的中间件
//中间件的作用:共享同一份(req.res)
app.use((req, res, next) => {
    let str = '' //存储客户端发送的请求
    req.on('data', (chunk) => {
        str += chunk;
    })
    req.on('end', (chunk) => {
        str += chunk
        req.body = qs.parse(str)
        next()
    })
})

//创建路由
app.post('/login', (req, res) => {
    console.log(req.body);
})

//启动web服务器
app.listen(8080, () => {
    console.log('服务器启动http:127.0.0.1');
})

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-12 23:20:30  更:2021-10-12 23:22:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 23:55:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码