下面是对Express框架中间件的处理,希望可以帮助到有需要的小伙伴~

中间件

什么是中间件

中间件就是一堆方法,

可以接收客户端发来的请求

可以对请求做出响应

也可以将请求继续交给下一个中间件继续处理。

中间件主要由两部分构成,中间件方法以及请求处理函数
中间件方法由Express提供,负责拦截请求,请求处理函数由开发人员提供,负责处理请求。

app.get('请求路径','处理函数') // 接收并处理get请求
app.post('请求路径','处理函数') // 接收并处理post请求

可以针对同一个请求设置多个中间件,对同一个请求进行多次处理。

// 引入express框架
const { SSL_OP_NETSCAPE_CA_DN_BUG } = require('constants');
const express = require('express');
// 创建网站服务器
const app = express();// 参数next是一个方法,有next就可以使用下一个中间件,否则一旦中间件匹配成功,就不会去找下一个中间件了
// 给req添加了一个name属性,name属性的属性值是‘张三’
app.get('/request',(req,res,next) => {req.name = '张三';next();
});
// 把name属性发送给客户端
app.get('/request',(req,res) => {res.send(req.name);
})// 监听端口
app.listen(3000);
console.log('网站服务器启动成功');

express().use中间件用法

注意:express().use中间件必须放在其他中间件的前面

  • express().use 匹配所有的请求方式(即 任意一个地址都可以),可以直接传入请求处理函数,代表接收所有的请求。
express().use((req,res,next) => {console.log(req.url);next();
})
  • app.use 第一个参数也可以传入地址,代表不论什么请求方式,只要是这个请求地址就接收这个请求。
express().use('/admin',(req,res,next) => {console.log(req.url);next();
})

实例:

// 引入express框架
const { SSL_OP_NETSCAPE_CA_DN_BUG } = require('constants');
const express = require('express');
// 创建网站服务器
const app = express();app.use((req,res,next) => {console.log("请求走了app.use中间件");next();
})// 当客户端访问/request请求的时候走当前中间件
app.use('/request',(req,res,next) => {console.log("请求走了app.use /request中间件");next();
})// 参数next是一个方法,有next就可以使用下一个中间件,否则一旦中间件匹配成功,就不会去找下一个中间件了
// 给req添加了一个name属性,name属性的属性值是‘张三’
app.get('/request',(req,res,next) => {req.name = '张三';next
});
// 把name属性发送给客户端
app.get('/request',(req,res) => {res.send(req.name);
})// 监听端口
app.listen(3000);
console.log('网站服务器启动成功');

中间件应用

  1. 路由保护,客户端在访问需要登录的页面时,可以先使用中间件判断用户登录状态

    • 如果用户未登录,则拦截请求,直接相应,禁止用户进入需要登录的页面
    • 如果用户登录了,则不拦截请求,允许用户进入需要登录的页面
    // 引入express框架
    const express = require('express');
    // 创建网站服务器
    const app = express();
    // 定义一个中间件
    app.use('/admin',(req,res,next) => {// 用户没有登录let isLogin = false;// 如果用户登录if (isLogin) {// 让请求继续向下执行next()}else {// 如果没有用户登录 直接对客户做出响应res.send('您还没有登录 不能访问/admin这个页面')}
    })// 定义一个路由
    app.get('/admin',(req,res) => {res.send('您已经登录 可以访问当前页面')
    })// 监听端口
    app.listen(3000);
    console.log('网站服务器启动成功');
  2. 网站维护公告,在所有路由的最上面定义接收所有请求的中间件,直接为客户端做出响应,网站正在维护中。

    // 引入express框架
    const express = require('express');
    // 创建网站服务器
    const app = express();// 定义中间件
    // 维护网站
    app.use((req,res,next) => {res.send('当前网站正在维护...')
    })// 保护路由
    app.use('/admin',(req,res,next) => {// 用户没有登录let isLogin = false;// 如果用户登录if (isLogin) {// 让请求继续向下执行next()}else {// 如果没有用户登录 直接对客户做出响应res.send('您还没有登录 不能访问/admin这个页面')}
    })// 定义一个路由
    app.get('/admin',(req,res) => {res.send('您已经登录 可以访问当前页面')
    })// 监听端口
    app.listen(3000);
    console.log('网站服务器启动成功');
  3. 自定义404页面 (在代码中要放到最后写)

    // 引入express框架
    const express = require('express');
    // 创建网站服务器
    const app = express();// 定义中间件// 维护网站
    /* app.use((req,res,next) => {res.send('当前网站正在维护...')
    }) */// 保护路由
    app.use('/admin',(req,res,next) => {// 用户没有登录let isLogin = false;// 如果用户登录if (isLogin) {// 让请求继续向下执行next()}else {// 如果没有用户登录 直接对客户做出响应res.send('您还没有登录 不能访问/admin这个页面')}
    })// 定义一个路由
    app.get('/admin',(req,res) => {res.send('您已经登录 可以访问当前页面')
    })// 当所有请求都没有响应的时候,会返回“访问失败”
    app.use((req,res,next) => {// 修改状态码/* res.status(404);res.send('当前访问的页面不存在'); */// 等价于res.status(404).send('当前访问的页面是不存在的')
    })// 监听端口
    app.listen(3000);
    console.log('网站服务器启动成功');

错误处理中间件

在程序执行的过程中,不可避免的会出现一些无法预料的错误,比如文件读取失败,数据库连接失败。

错误处理中间件是一个集中处理错误的地方。

注意:

错误处理中间件只能处理同步错误,不能处理异步错误,如果要处理异步错误,需要使用next()方法,并给next()方法传递参数

同步错误实例:

// 引入express框架
const express = require('express');
// 创建网站服务器
const app = express();app.get('/index',(req,res) => {// 手动抛出一个错误throw new Error('程序发生了未知错误')// res.send('程序正常执行')
})// 错误处理中间件
app.use((err,req,res,next) => {res.status(500).send(err.message);
})// 监听端口
app.listen(3000);
console.log('网站服务器启动成功');

异步错误实例:

// 引入express框架
const express = require('express');
// 引入文件模块
const fs = require('fs');// 创建网站服务器
const app = express();app.get('/index',(req,res,next) => {// 手动抛出一个错误// throw new Error('程序发生了未知错误')fs.readFile('./demo.txt','utf8',(err,result) => {if (err != null) {next(err)} else {res.end(result)}})
})// 错误处理中间件
app.use((err,req,res,next) => {res.status(500).send(err.message);
})// 监听端口
app.listen(3000);
console.log('网站服务器启动成功');

错误处理中间件和其他中间件的区别:

  • 错误处理中间件有4个参数 err req res next

  • err默认只能获取到同步代码执行时的错误;如果要获取异步代码执行的错误,需要添加next()方法,并传递参数

捕获错误

在nodejs中,异步API的错误信息都是通过回调函数获取的,支持Promise对象的异步API发生错误可以通过catch方法捕获。

try catch 可以捕获异步函数以及其他同步代码在执行过程中发生的错误,但是不能捕获其他类型的API发生的错误。

实例:

// 引入express框架
const express = require('express');
// 引入文件模块
const fs = require('fs');
// 把读取文件的输出结果改为promise类型
const promisify = require('util').promisify;
const readFile = promisify(fs.readFile);// 创建网站服务器
const app = express();
// 如果获取到错误,就执行catch里面的代码
// 如果没有捕获到错误,就执行catch后面的代码
app.get('/index',async(req,res,next) => {try {await readFile('./aaa.js')} catch (err) {next(err);}
})// 错误处理中间件
app.use((err,req,res,next) => {res.status(500).send(err.message);
})// 监听端口
app.listen(3000);
console.log('网站服务器启动成功');

end~

Express中间件(非常详细)相关推荐

  1. Node.js b站教学视频汇总笔记(完)CommonJS模块规范、 require、npm、Express(中间件)、MongoDB、MySQL

    文章目录 Node.js b站教学视频汇总笔记(完)CommonJS模块规范. require.npm.Express(中间件).MongoDB.MySQL 1. Node介绍 为什么要学习Node. ...

  2. Express中间件工作原理介绍

    Express中间件工作原理介绍 中间件是Express框架学习中最难的部分,同时也是最为核心的技术,我们的学习路线如下 1.什么是中间件 2.Express中间件的本质及工作原理 3.自定义解析po ...

  3. 二、express中间件

    一.中间件引入 实现加入日志模块功能: 1. 我们能想到的方案: 将日志输出代码封装到函数中,然后需要日志输出的地方调用这个函数即可. app.js文件: const express = requir ...

  4. koa2 mysql 中间件_Koa2 和 Express 中间件对比

    koa2 中间件 koa2的中间件是通过 async await 实现的,中间件执行顺序是"洋葱圈"模型. 中间件之间通过next函数联系,当一个中间件调用 next() 后,会将 ...

  5. Express 中间件 body-parser 原理分析

    原文出自:https://www.pandashen.com 前言 Express 是基于 NodeJS 平台的 Web 框架,应用广泛,在 Express 社区中有着大量的开发者通过 Express ...

  6. node.js学习笔记3 express基本使用、托管静态资源、express中间件

    内容 1. 什么是express 1.1 http模块和express的关系 2. express能做什么 3. express的基本使用 3.1 安装 3.2 创建最基本的web服务器 3.3 监听 ...

  7. Node.js—Express、Express 路由 、Express 中间件、使用 Express 写接口

    目标: 能够使用 express.static() 快速托管静态资源 能够使用 express 路由精简项目结构 能够使用常见的 express 中间件 能够使用 express 创建API接口 能够 ...

  8. Node 学习 | Day03 express (初识Express、Express 路由、Express 中间件、使用 Express 写接口)

    Express 初识Express 1.1 Express 简介 1.1.1 什么是 express 1.1.2 进一步理解 Express 1.1.3 Express可以做什么 1.2 Expres ...

  9. Express 中间件及路由

    通过示例介绍中间件 打印请求日志(输出每个请求的 请求方法 + 请求路径 + 请求时间) app.get('/', (req, res) => {res.send('get /') })app. ...

  10. SQL Server 2008 Express 安装配置详细教程

    SQL Server 2008 Express 安装配置详细教程 本文出自:http://it.agoit.com/thread-468537-1-1.html 下载 可以访问 Microsoft 下 ...

最新文章

  1. 计算机如何表示色彩?
  2. 数据库名、实例名、数据库域名、全局数据库名、服务名,
  3. bzoj3218: a + b Problem
  4. Vijos P1103 校门外的树【线段树,模拟】
  5. Java基础知识:IO
  6. java lambda 表达式中的双冒号和箭头的用法 ::
  7. 导入一个android项目需要改什么意思,导入别人的Android Studio项目前要修改的文件...
  8. 如何解决JSP中文乱码问题
  9. 基于stm32的蓝牙遥控智能小车_基于51用蓝牙控制小车(提高篇)
  10. java计算机毕业设计教务排课系统源码+mysql数据库+系统+lw文档+部署
  11. 企业级docker仓库Harbor在kubernetes上搭建使用
  12. Django Grappelli后台管理
  13. 商机无限!在政府门户网站升级改造中掘金
  14. 148 朴光佑 蓽齋
  15. 一个出身寒门的状元之编程
  16. 超材料常用的仿真软件CST COMSOL HFSS指导实际操作
  17. Android结合源码分析Power按键处理流程
  18. 董树义 近代微波测量技术_微波和微波信号的分析方法介绍
  19. 智慧工厂:EasyNVR如何让工厂实现现代化与智能化视频监控与管理?
  20. socket的read和available()方法

热门文章

  1. 如何用wdcp面板创建网站(转百度经验)
  2. POJ1604 UVA568 UVALive5499 Just the Facts【模除+打表】
  3. JSK-391 公约公倍【入门】
  4. 机器学习套路 —— 样本集的拆分(正样本、负样本)
  5. Bootstrap 警告
  6. Linux 实用命令
  7. 深度学习实践指南(一)—— 卷积和池化
  8. Tricks(四十)—— 神经网络解决与(或)及异或问题
  9. [面试] 算法(二)—— 第一个出现一次的字符(第一个出现 k 次、出现最多次)
  10. Python 数据结构与算法 —— list与deque(双端队列)