猿问

express的中间件是什么

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

慕沐林林
浏览 1427回答 2
2回答

万千封印

你说的中间件是一系列函数,从文字角度来说,这个没错。“中间件传入的参数是options”,这里的中间件应该只是 第三方中间件。官方的中间件 是一个很广的概念,app.use(function (req, res, next) {   console.log('Time:', Date.now());   next(); });笼统的说,app.use()传入的任何function都可以叫中间件,但是,这样就不太专业了, 你要是传个函数,什么也不做,或者做一些没用的事,那自然不能用中间件这么专业的词语了,所以,只要你这个function做的是有效的,有用的事,并且实现的好,帮你解决了响应过程中的关键问题,就可以叫中间件了。而那句“中间件传入的参数是option”,那只不过是一些封装好了的第三方中间件而已,类似于cookie-parser。如果这是面试官说的,只能说他理解太片面了,可能连官方文档都没看过。

慕慕森

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