将function传递给下一个function,根据条件进行激活。 的NodeJS

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

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

http://localhost/api/highscores的app.jsurl现在使用给定的参数调用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; } }); } 

我只想运行正在传递的函数,因为我从数据库中获得了正确的结果(其他检查将稍后添加会话date等)。 我将如何做到这一点?

要延迟调用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(); } // ... 

除非我不完全了解你的问题,你不能就这样做吗?

 if (result && some_validator(result)) { callback(); }