验证nodejs + express中的URL以处理错误的请求错误

Nan*_*ano 1 javascript rest http node.js

那么,在阅读了关于这个问题的一些事情之后,我决定询问一下.

核心思想很简单:检测传入的无效URL/URI,并使用相关代码/数据向客户端返回响应.

通常,在处理节点中的错误时,我们使用如下语法:

if (err) {
    return res.status(500).json(error: {msg: err.message, stack: err.stack});
}
Run Code Online (Sandbox Code Playgroud)

好吧,这很简单,但重要的是我们检测到:"嘿,如果发生错误,请将此事发送给客户".

但如果它不是500内部怎么办?据我所知,错误的请求错误会像客户端错误一样发送,并在提示符,rigth中有自己的堆栈,类型和消息?

读取这个,我找到了URIError构造函数,它指向一个表示与ivalids URI一起出现的错误的实例.所以,有可能这样做:

if (err instanceof URIError) { /* send a handler for bad request */ };
Run Code Online (Sandbox Code Playgroud)

或者我需要从头开始验证URI并进行自己的错误继承?

任何提示?理念?... 提前致谢!<3

bra*_*ipt 8

我通常通过定义我想要的路线来做到这一点:

app.get('/good' ... );
app.post('/alsogood' ... );
Run Code Online (Sandbox Code Playgroud)

然后抓住未经发布的网址,执行:

app.all('*', function(req, res) {
    throw new Error("Bad request")
})
Run Code Online (Sandbox Code Playgroud)

然后注入一个错误处理中间件:

app.use(function(e, req, res, next) {
    if (e.message === "Bad request") {
        res.status(400).json({error: {msg: e.message, stack: e.stack}});
    }
});
Run Code Online (Sandbox Code Playgroud)

你显然可以得到比这更复杂的东西,但这个简单的想法得到了重点.

此外,对于它的价值,如果他们试图访问不存在的URL,您应该将404返回给客户端.