1

Express.js を使用して node.js REST サーバーを作成しています。その一環として、単純なセッション システムも作成しています。私は3つのモジュールを持っています:

  • app.js
  • highscoreMan.js
  • userSession.js

今のところ app.js url はhttp://localhost/api/highscores、指定されたパラメーターで userSession を呼び出します。

//Get all highscores
app.get('/api/highscores', function (req, res) {
  userSession.checkValidity(req.query['username'], req.query['sessionid'], highscoreMan.getAll(req, res));
});

ただし、checkValidity では、渡す関数が自動的に呼び出されます。

function checkValidity(username, sessionId, callback) {
  userSession.findOne({ userid: username, sessionid: sessionId }, function (err, result) {
        if (err) {
          console.log(err);
        }
        if(result) {
          callback;
        }
  });
}

データベースから適切な結果が得られた場合にのみ、渡された関数を実行したいだけです(セッションの日付などについては、後で他のチェックが追加されます)。どうすればいいですか?

4

2 に答える 2

2

の呼び出しを遅らせるには、後で呼び出すことができるhighscoreMan.getAll()別のステートメントにする必要があります。function

app.get('/api/highscores', function (req, res) {
  userSession.checkValidity(req.query['username'], req.query['sessionid'], function () {
    highscoreMan.getAll(req, res);
  });
});

それ以外の場合は、すぐに呼び出され、return代わりにその値が に渡されuserSession.checkValidity()ます。

checkValidity渡された を呼び出すように調整する必要があることに注意してくださいcallback

// ...
if(result) {
  callback();
}
// ...
于 2013-04-06T00:47:40.957 に答える
0

あなたの問題を完全に理解していない限り、このようなことをしていただけませんか?

if (result && some_validator(result)) {
    callback();
}
于 2013-04-06T00:33:27.940 に答える