• express中间件的理解


    一、概念(来自官网

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

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

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

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

    参考文章:http://expressjs.com/zh-cn/guide/writing-middleware.html

    二、自定义中间件

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

    // checkUser.js
    module.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(/ /g, '</br>'); res.send(
    'errorStatus:' + (err.status || 500) + '</br> Error: ' + msg + '</br>'); 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;
    });
  • 相关阅读:
    webstorm配置less解析的方法
    C#面试题(String和StringBuilder区别)
    Winform控件输入的字母转换成大写
    C#之实参和形参
    我学React Native开发的经历(一) 第一周学习,环境搭建及demo1,一个导航跳转页面
    三、CSS样式——背景
    二、CSS选择器
    一、CSS介绍
    九、非主体机构元素——header元素、footer元素、address元素、网页编排
    八(第三篇)、主体结构元素——time元素、pubdate属性
  • 原文地址:https://www.cnblogs.com/jieru/p/7195841.html
Copyright © 2020-2023  润新知