我正在使用NodeJS,express和passport。不过我认为这个问题只是关于javascript。 在我的路线文件中,我有
app.get( '/users', login_req, user.index);
所以当服务器在/ users接收到get请求时,它将通过login_req函数传递req, res, next
,如果用户被授权,login_req将调用user.index函数。我想知道是否以及如何为login_req添加更多参数?我的目标是能够传递其他参数login_req(['admin'],['user1', 'user2'])
,以便能够选择哪些用户可以访问user.index。
这是我的login_req代码:
exports.login_req = function(req, res, next) {
if (req.isAuthenticated()) { return next(); }
res.redirect('/login')
}
我想,总的来说,我想知道如何在回调中添加更多参数。
答案 0 :(得分:2)
上述答案应该有效,但我正在寻找更有条理的解决方案。使用我从上面的答案中学到的东西,我想出了以下内容。
我从jQuery pass more parameters into callback了解了如何在回调中添加更多参数。这是我的代码:
exports.login_req = function(groups, users) {
return function(req, res, next) {
console.log(groups, users)
if (req.isAuthenticated()) { return next(); }
res.redirect('/login')
};
}
和
app.get( '/users', login_req("group1"), user.index);
对login_req的回调传递groups =“group1”和users = undefined。 login_req返回带有args req, res, next
和groups, users
的匿名函数,可通过闭包获得。我已经打印出组和用户的概念证明,它似乎有效。
我更喜欢这种方法,因为现在我可以将routes.js文件组织起来:
app.get( '/users', login_req("admins"), user.index);
app.get( '/users/new', user.new);
app.post( '/users', user.create);
app.get( '/users/:id', user.show);
app.get( '/users/:id/edit', login_req("admins", "user1"), user.edit);
app.put( '/users/:id', login_req("admins", "user1"), user.update);
app.del( '/users/:id', login_req("admins", "user1"), user.destroy);
答案 1 :(得分:1)
将匿名函数传递给get
并从其中调用login_req
:
app.get('/users', function (req, res, next) {
login_req(req, res, next, something, somethingElse);
}, user.index);