7

有没有办法在 Express 堆栈中注入中间件?我的意思是我想让我的 app.js 设置主中间件链,然后调用传递应用程序实例的其他模块,他们可能想要插入更多中间件(例如,想要在正确位置添加护照的身份验证模块)

4

3 回答 3

14

您当然可以将您的app对象传递给其他模块并use在那里调用。当然,中间件函数是按照它们添加的顺序执行的,所以你必须非常小心,确保你use以正确的顺序调用。

应用程序.js

var app = express();
// ...

app.use(express.logger()); // first middleware function

var someOtherModule = require('./mod.js');
someOtherModule.init(app);

app.use(express.static()); // last middleware function)

mod.js

exports.init = function(app) {
    app.use(function(req, res, next) {

    });
};

至于实际在堆栈中间注入中间件函数(在您已经app.use使用一组中间件函数调用之后),没有记录的方法可以做到这一点。 use只将一个函数添加到堆栈的末尾。

use实际上是由proto.js中的 Connect 提供的:

app.use = function(route, fn){

  ...

  this.stack.push({ route: route, handle: fn });

  return this;
};

从技术上讲,你可以摆弄app.stack自己,但我不会这样做。你会弄乱一个未记录的实现细节,这很可能会改变。换句话说,未来对Connect 或 Express 的更新可能会破坏您的应用程序

于 2012-12-03T20:56:39.110 回答
0

您可以使用 app.use(fn) 或像这样堆叠它们:

app.get('/foo', fn1, fn2, fn3);

签名必须始终相同并调用 next();

function(req, res, next) {
  next();
}
于 2012-12-03T21:22:18.780 回答
-2

我不明白这是什么问题?

您可以在中间件中添加任何功能:

app.use(function(req,res,next){
   //some munipulation with req and res
   next()
})

你可以把它发送app到你的模块中

于 2012-12-03T20:36:45.580 回答