我想將一系列app.use()
調用移入其自己的模塊中。封裝這個最簡單的方法是在出口中公開一個function(app)
,但我覺得交給app
對象是一個不透明的接口太多。Express:撰寫中間件
我想從模塊外部公開一箇中間件app.use()
'd。我需要鏈接/撰寫內部使用的中間件。
有沒有一種時尚的方式做到這一點,或替代?最簡單的方法是什麼?任何我應該避免的?
我想將一系列app.use()
調用移入其自己的模塊中。封裝這個最簡單的方法是在出口中公開一個function(app)
,但我覺得交給app
對象是一個不透明的接口太多。Express:撰寫中間件
我想從模塊外部公開一箇中間件app.use()
'd。我需要鏈接/撰寫內部使用的中間件。
有沒有一種時尚的方式做到這一點,或替代?最簡單的方法是什麼?任何我應該避免的?
縱觀Express(和它所基於的Connect)的代碼,看起來在一塊中間件上調用use
並不會以任何方式通知任何事情,所以確實沒有辦法提前編寫任何事情而不通過app
。然而,您可以在運行時間進行組合,例如,第一次調用中間件時,組合一些函數並緩存/調用它們。
這是我的看法:
// app.js
...
app.use(require('./middleware')());
...
// middleware.js
var express = require('express');
module.exports = function() {
var middleware = [
// list of middleware that you want to have performed:
function mymiddleware(req, res, next) {
console.log('hello world');
next();
},
express.logger('dev'),
express.cookieParser(),
express.static(__dirname)
];
return function(req, res, next) {
(function iter(i, max) {
if (i === max) {
return next();
}
middleware[i](req, res, iter.bind(this, i + 1, max));
})(0, middleware.length);
};
};
如果您需要在您的自定義中間件訪問的應用程序,你可以通過req.app
或res.app
訪問它。