如何为我的函数添加更多参数?

时间:2013-01-08 23:32:08

标签: javascript node.js express connect passport.js

我正在使用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')
}

我想,总的来说,我想知道如何在回调中添加更多参数。

2 个答案:

答案 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, nextgroups, 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);
相关问题