【发布时间】:2012-12-14 09:22:12
【问题描述】:
我最近才开始研究基于 express.js 的应用程序,该应用程序也使用 pg 模块 (https://github.com/brianc/node-postgres)
我还花费了大量时间,阅读有关节点和 express 方法错误处理、正确设计中间件的好处等内容。然而,一个反复出现的问题仍然困扰着我,但没有解决方案。
说,我有如下路由器方法:
app.get("/:someThing/:someId", function(req, res, next) {
pgClient.query("some SQL query", function(err, data) {
if (err) { return next(err); } // some 500 handler will take it
if (data.rows.length == 0) {
next(); // send it over to a 404 handler
}
//finally, here we get the chance to do something with the data.
//and send it over via res.json or something else
});
});
如果我没看错,这应该是正确的做法。然而,我敢打赌,你也可以承认,如果我们有多个嵌套回调,那么一遍又一遍地重写是太多的样板......一遍又一遍,即使在同一个路由器方法中也是如此。
我一直在问自己,集中处理这种情况的最佳方法是什么。我所有的想法都涉及拦截 pgClient.query 方法。一方面,查询方法将简单地抛出错误而不是将其传递给回调。在另一种情况下,对 pgClient.query 的调用会将路由器方法的 next 发送到 pgClient。那么被截获的查询方法就会知道如何处理下一个被传递给它的方法。
据我所知,抛出错误并不是将错误传递给 500 个处理程序的正确方法。另一方面,将next作为选项传递给pgClient,对上面的层提供了如此低的大量知识,根据我的知识和经验,这可能会导致耦合,也不是很好。
你有什么建议?
【问题讨论】:
-
不,我为所有 500 个请求考虑了一条路由。
标签: node.js error-handling express