我正在使用Passport,我需要将多个参数传递给我的控制器到我的路由器。基本上它只通过第一个。
我想要
app.get('/auth/steam', controllers.auth.authenticate);
导致
app.get('/auth/steam', passport.authenticate('steam'), function(req, res) { res.render('index') };);
现在它只加载第一个参数。
我的控制器看起来像这样
exports.authenticate =
passport.authenticate('steam'),
function(req, res) {
res.render('index');
};
我该怎么做?
编辑:我想只能用 controllers.auth.authenticate 来调用它,而不是像 controllers.auth.authenticate [0] 这样的数组!
答案 0 :(得分:0)
警告未经测试。
你可以包装所有内部功能
exports.authenticate = function(req, res, next) {
passport.authenticate('steam', function(err, user, info) {
if (err) { return next(err); }
if (!user) { return res.redirect('/auth/steam'); }
res.render("index");
});
}
或者您可以使用router
并保护所有动词(获取,发布等)
var express = require('express');
var router = express.Router();
router.use(function (req, res, next) {
passport.authenticate('steam');
});
router.get('/', function(req, res, next) {
res.render("index");
});
module.exports = router;
在应用上使用路由器
var ctrl = require("yourModuleName");
app.use('/auth/steam', ctrl); // app.use NOT app.get
其他替代方法是仅保护get
var express = require('express');
var router = express.Router();
router.get('/', passport.authenticate('steam'), function(req, res, next) {
res.render("index");
});
module.exports = router;
var ctrl = require("yourModuleName");
app.use('/auth/steam', ctrl); // app.use NOT app.get
请参阅Express routing页面