在中间件中使用中间件有更好的方法吗?

例如,我想创build一些使用Passport的中间件,但是我不想在使用此自定义中间件的应用程序中需要Passport。 我相信我可以做到以下事情来实现这一点。 这是正确的吗? 有一个更好的方法吗?

someModule.js

var express = require('express'), passport = require('passport'); exports.someMiddleware = function(app) { app.use(passport.initialize()); app.use(passport.session()); return function(req, res, next) { // Do something next(); } } 

app.js

 var express = require('express'); var someModule = require('./someModule'); app = express(); app.use(someModule.someMiddleware(app)) 

而不是……

someModule.js

 var express = require('express'), passport = require('passport'); exports.someMiddleware = function(app) { return function(req, res, next) { // Do something next(); } } 

app.js

 var express = require('express'), passport = require('passport'); var someModule = require('./someModule'); app = express(); app.use(passport.initialize()); app.use(passport.session()); app.use(someModule.someMiddleware()) 

我build议使用embedded式应用程序来保持代码的组织和可重用。 保持embedded式应用程序中的路线尽可能短,以便使用它们的主应用程序可以设置适当的基本path。

module.js

 var express = require('express'); var passport = require('passport'); var controller = module.exports = express(); controller.use(passport.initialize()); controller.use(passport.session()); // Login controller.post('/', function (request, response, next) { /* ... */ }); // Logout controller.del('/', function (request, response, next) { /* ... */ }); 

app.js

 var app = express(); var controller = require('./controllers/module'); app.use('/authentication', controller);