1

我正在使用 NodeJS、快递和护照。但是我认为这个问题只是关于javascript。在我的路线文件中,我有

app.get(  '/users', login_req, user.index);

所以当服务器在/users收到get请求时,会req, res, next通过login_req函数,如果用户被授权,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')
}

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

4

2 回答 2

2

上面的答案应该有效,但是我正在寻找一个更有条理的解决方案。使用我从上述答案中学到的知识,我想出了以下内容。

我从jQuery中了解到如何将更多参数添加到回调中。这是我的代码:

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。req, res, nextlogin_req 返回带有 args和的匿名函数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);
于 2013-01-08T23:59:42.333 回答
1

传递一个匿名函数get并从中调用login_req

app.get('/users', function (req, res, next) {
    login_req(req, res, next, something, somethingElse);
}, user.index);
于 2013-01-08T23:34:59.490 回答