1

我使用 express.js 创建一个 node.js REST 服务器,作为其中的一部分,我还创建了一个简单的会话系统。我有 3 个模块:

  • 应用程序.js
  • highscoreMan.js
  • 用户会话.js

app.js urlhttp://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 回答