好吧,在读了一些关于这个问题的东西之后,我决定问问。
其核心思想很简单:检测传入的无效url/uri并用相关的代码/数据向客户端返回响应。
通常,在处理节点中的错误时,我们使用如下语法:
if (err) {
return res.status(500).json(error: {msg: err.message, stack: err.stack});
}
好吧,这很简单,但最重要的是我们检测到:“嘿,如果发生错误,就把这个东西射给客户。”
但如果不是500的内线呢?我知道,错误请求错误就像客户端错误一样发送,在提示符中有自己的堆栈、类型和消息,对吧?
通过阅读This,我找到了uri error构造函数,它指向一个实例,该实例表示使用ivalids uri时发生的错误。因此,可以制作一些这样的实例:
if (err instanceof URIError) { /* send a handler for bad request */ };
或者我需要从头开始验证uri并进行我自己的错误继承?
有什么线索吗?有主意吗?…提前谢谢!
最佳答案
我通常通过定义我想要的路线来实现这一点:
app.get('/good' ... );
app.post('/alsogood' ... );
然后要捕获未路由的URL,请执行以下操作:
app.all('*', function(req, res) {
throw new Error("Bad request")
})
然后注入错误处理中间件:
app.use(function(e, req, res, next) {
if (e.message === "Bad request") {
res.status(400).json({error: {msg: e.message, stack: e.stack}});
}
});
显然,你可以得到比这复杂得多的东西,但这个简单的想法可以让人明白。
另外,对于它的价值,如果他们试图访问一个不存在的URL,你可能需要向客户端扔404。