Node.js 在passportjs中,当我在单个文件中声明注销时,它正在工作,但当我将它移动到不同的模块时,它不工作

Node.js 在passportjs中,当我在单个文件中声明注销时,它正在工作,但当我将它移动到不同的模块时,它不工作,node.js,express,passport.js,Node.js,Express,Passport.js,单个文件index.js正在工作 var passport = require('passport'); var app = express(); .... app.use(passport.initialize()); app.use(passport.session()); app.route('/logout').get(function(req,res){ req.logout(); res.send('loggedout'); }); 但当我把

单个文件index.js正在工作

var passport = require('passport');
var app = express();
....
app.use(passport.initialize());
app.use(passport.session());
app.route('/logout').get(function(req,res){
        req.logout();
        res.send('loggedout');
    });
但当我把它分成两个文件时

//file1 index.js
var passport = require('passport');
var wrapper = require('./wrapper.js');
var app = express();
....
app.use(wrapper(app,passport));



// file2 wrapper.js

module.exports = function(app, passport){
    return function(req, res, next){
        app.use(passport.initialize());
        app.use(passport.session());
        app.route('/logout').get(function(req,res){
            req.logout();
            res.send('loggedout');
        });
    }
}
在这种情况下,它不是注销。 有时,当我将逻辑移到单独的文件中时,passport初始化无法正常工作,并且我得到“passport.initialize()中间件未使用”

请告诉我如何包装passport,以便..所有初始化和会话都在另一个文件(我指的是模块)中处理,以便在源文件中我可以使用包装器而无需初始化passport


简而言之,包装passportjs的模式当前代码在每个传入请求上添加passport初始化和会话中间件。它们被添加到中间件堆栈的末尾,因此可能永远不会被调用。由于不调用
next
方法,因此您的请求也永远不会超出此中间件。您还构建了内存泄漏

您的代码可能看起来像(未经测试,只是写下来):

用法:

var app = express();
require('./passport-stuff')(app)
注意:您可以在多个文件中
require('passport')
,它们都得到相同的实例。也就是说,您不必提供passport做其他文件

var app = express();
require('./passport-stuff')(app)