在使用 Express 框架开发网站或 API 时,经常会因为 Node.js 的异步流程造成逻辑代码中嵌套回调函数过多的问题。这时可以考虑使用 Promise 来简化这个流程。关于 Promise 可以参考以下资料:

http://www.infoq.com/cn/news/2011/09/js-promise http://martinfowler.com/bliki/JavascriptPromise.html

现在 Node.js 很多 ORM/ODM 都通过 Promise 来返回查询、执行结果,而普通的 Node.js 风格回调函数可以很容易的转换成 Promise。

为此,我为 Express 框架开发了一个 middleware 用来更方便地使用 Promise。

例如,我们可能会经常写出如下代码:

app.get('/users/:userId', function(req, res) {
  User.find(req.params.userId).then(function(user) {
    Project.getMemo(req.params.userId).then(function(memo) {
      res.json({
        user: user,
        memo: memo
      });
    });
  });
});

而使用 express-promise 后,上面的代码可以改写成:

app.get('/users/:userId', function(req, res) {
  res.json({
    user: User.find(req.params.userId),
    memo: Project.getMemo(req.params.userId)
  });
});

更多实例可以见项目主页: https://github.com/luin/express-promise

项目同样对 Mongoose 的 Query 对象提供了额外的支持。