博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
express中间件的理解
阅读量:4705 次
发布时间:2019-06-10

本文共 1334 字,大约阅读时间需要 4 分钟。

一、概念(来自官网

中间件函数能够访问 (req)、 (res) 以及应用程序的请求/响应循环中的下一个中间件函数。下一个中间件函数通常由名为 next 的变量来表示。

中间件函数可以执行以下任务:

  • 执行任何代码。
  • 对请求和响应对象进行更改。
  • 结束请求/响应循环。
  • 调用堆栈中的下一个中间件函数。

如果当前中间件函数没有结束请求/响应循环,那么它必须调用 next(),以将控制权传递给下一个中间件函数。否则,请求将保持挂起状态。

参考文章:

二、自定义中间件

假如要写一个中间件,用户每次访问页面都需要判断他是否有登录,或者还有其他对用户的检验,则可以写一个中间件去处理,

// checkUser.jsmodule.exports = function () {  return function (req, res, next) {     if (!req.session.uid) {
//如果没有uid,则表示还没登录,提示还没登录 res.render('common/hint', { 'content': '您还没登录!', 'url':'http://127.0.0.1:3000/user/login' }); return; } // 这里还可以写很多检测用户的逻辑。。。。 next(); }};

接着在app.js引入该中间件,再使用它即可:

var checkUser= require('./checkUser.js');app.use(checkUser());

当然要想在路由层级使用它也是一样的

三、错误处理的中间件

1.错误处理中间件函数的定义方式与其他中间件函数基本相同,差别在于错误处理函数有四个自变量而不是三个,专门具有特征符 (err, req, res, next)

app.use((err, req, res, next) => {
  let msg = err.toString().replace(/\n/g, '
'); res.send('errorStatus:' + (err.status || 500) + '
Error: ' + msg + '
'); res.end(); })

当有错误发生的时候,会跳过所有的普通中间件,但是不会跳过错误处理中间件

2.如何触发错误处理中间件?

方法一:直接用next进行传递

app.use(function(req, res, next) {    var err = new Error('Not Found');    err.status = 404;    next(err);});

方法二:直接throw

app.use(function(req, res, next) {    var err = new Error('Not Found');    err.status = 404;    throw err;});

 

转载于:https://www.cnblogs.com/jieru/p/7195841.html

你可能感兴趣的文章
vscode中执行gulp task的简便方法
查看>>
Ugly Number II
查看>>
【转】数据库索引的基础知识
查看>>
如何判断你的windows系统是32位还是64位?
查看>>
『题解』洛谷P1314 聪明的质监员
查看>>
Pictures & texts synthesiser
查看>>
《hello--world团队》第六次作业:团队项目系统设计改进与详细设计
查看>>
JFreeChart生成饼形图(3)11 (转自 JSP开发技术大全)
查看>>
C#中的文件导出大全
查看>>
web 项目中添加ico 图标
查看>>
apache commons jar下载地址
查看>>
linux笔记:无线网络已连接,但无法上网
查看>>
js 操作<input type="hidden" runnat="server" id="month">服务器控件
查看>>
raid10
查看>>
网络通信和TCP详解
查看>>
CPU、内存、硬盘和主板的关系
查看>>
简单后台管理系统框架--HTML练手项目2【Frameset】
查看>>
程序猿 面试经历
查看>>
苹果IOS 12将使您的iPhone更安全,并有更强大的黑客保护
查看>>
项目冲刺,第二天
查看>>