1

NodeJS、Express、Passportを使用しています。ただし、この質問は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を渡します。login_reqは、クロージャーによって使用可能なargsreq, 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);
于 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 に答える