6

因为从 Express 4 你不应该这样做

require('./app/routes.js')(app, passport); // load our routes and pass in our app and fully configured passport

module.exports = function(app, passport) {
    // =====================================
    // FACEBOOK ROUTES =====================
    // =====================================
    // route for facebook authentication and login

    app.get('/auth/facebook', passport.authenticate('facebook', { scope : 'email' }));

    // handle the callback after facebook has authenticated the user
    app.get('/auth/facebook/callback',
        passport.authenticate('facebook', {
            successRedirect : '/profile',
            failureRedirect : '/'
        }));

    // route for logging out
    app.get('/logout', function(req, res) {
        req.logout();
        res.redirect('/');
    });
};

相反,你应该使用express.Route()函数和

var routes = require('./app/routes.js');
app.use('/', routes);

如何将配置的护照传递到 Express 4 中的路由模块?

4

1 回答 1

8

function导出仍然可以用于在模块之间传递引用passport。它只会创建和returnaRouter而不是app直接修改。

var express = require('express');

module.exports = function(passport) {
    var router = express.Router();

    router.get('/auth/facebook', passport.authenticate('facebook', { scope : 'email' }));

    // etc.

    return router;
};

并且,app然后use可以使用:

var routes = require('./app/routes.js')(passport);
app.use('/', routes);
于 2014-12-07T07:24:03.453 回答