express的中间件是什么

荡漾
  • 79

看了文档,文档的说明是一系列的函数
但面试官说那不是中间件,只是路由函数
中间件传入的参数是options
希望有人可以解答一下

回复
阅读 2k
5 个回答

我个人觉得你可以直接看官方的样例里面的几个例子嘛, 比如 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
}

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

app.use()就是使用中间件

像什么body-parser不都是中间件吗?

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

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

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

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

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

你知道吗?

宣传栏