【问题标题】:Is there a better way to use middleware in middleware?有没有更好的方法在中间件中使用中间件?
【发布时间】:2015-01-07 00:18:32
【问题描述】:

例如,我想创建一些使用 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())

【问题讨论】:

    标签: node.js express passport.js


    【解决方案1】:

    我建议使用嵌入式应用程序来保持代码的良好组织性和可重用性。使嵌入式应用程序中的路由尽可能短,以便使用它们的主应用程序可以设置适当的基本路径。

    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);
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-09
    • 1970-01-01
    相关资源
    最近更新 更多