为了账号安全,请及时绑定邮箱和手机立即绑定

express的中间件是什么

express的中间件是什么

慕沐林林 2018-10-13 14:28:58
看了文档,文档的说明是一系列的函数但面试官说那不是中间件,只是路由函数中间件传入的参数是options希望有人可以解答一下
查看完整描述

2 回答

?
万千封印

TA贡献1891条经验 获得超3个赞

你说的中间件是一系列函数,从文字角度来说,这个没错。
“中间件传入的参数是options”,这里的中间件应该只是 第三方中间件
官方的中间件 是一个很广的概念,

app.use(function (req, res, next) {
  console.log('Time:', Date.now());
  next();
});

笼统的说,app.use()传入的任何function都可以叫中间件,但是,这样就不太专业了, 你要是传个函数,什么也不做,或者做一些没用的事,那自然不能用中间件这么专业的词语了,所以,只要你这个function做的是有效的,有用的事,并且实现的好,帮你解决了响应过程中的关键问题,就可以叫中间件了。

而那句“中间件传入的参数是option”,那只不过是一些封装好了的第三方中间件而已,类似于cookie-parser

如果这是面试官说的,只能说他理解太片面了,可能连官方文档都没看过。


查看完整回答
反对 回复 2018-10-25
?
慕慕森

TA贡献1856条经验 获得超17个赞

我个人觉得你可以直接看官方的样例里面的几个例子嘛, 比如 cookie-parser 就是一个典型的也符合你面试官口中的中间件.

function cookieParser(secret, options) {

  return function cookieParser(req, res, next) {

    if (req.cookies) {

      return next();

    }


    var cookies = req.headers.cookie;

    var secrets = !secret || Array.isArray(secret)

      ? (secret || [])

      : [secret];


    req.secret = secrets[0];

    req.cookies = Object.create(null);

    req.signedCookies = Object.create(null);


    // no cookies

    if (!cookies) {

      return next();

    }


    req.cookies = cookie.parse(cookies, options);


    // parse signed cookies

    if (secrets.length !== 0) {

      req.signedCookies = signedCookies(req.cookies, secrets);

      req.signedCookies = JSONCookies(req.signedCookies);

    }


    // parse JSON cookies

    req.cookies = JSONCookies(req.cookies);


    next();

  };

}

不过我个人的理解更倾向于, 只要函数的实现方式是类似于

function (req, res, next) {  
  //todo something
}

这种方式的函数, 都可以被称为中间件


查看完整回答
反对 回复 2018-10-25
  • 2 回答
  • 0 关注
  • 1431 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信