减少异步嵌套,Express middleware: express-promise
在使用 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 对象提供了额外的支持。