Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 验证nodejs+express中的URL以处理错误的请求错误_Javascript_Node.js_Rest_Http - Fatal编程技术网

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

Javascript 验证nodejs+express中的URL以处理错误的请求错误,javascript,node.js,rest,http,Javascript,Node.js,Rest,Http,嗯,在读了一些关于这个问题的东西之后,我决定问一下 核心思想很简单:检测传入的无效URL/URI,并使用相关代码/数据向客户端返回响应 通常,在处理节点中的错误时,我们使用如下语法: if (err) { return res.status(500).json(error: {msg: err.message, stack: err.stack}); } 好吧,这很简单,但最重要的是我们要检测:嘿,如果发生错误,把这个东西射给客户 但如果它不是一个500内部?正如我所知,错误的请求错误

嗯,在读了一些关于这个问题的东西之后,我决定问一下

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

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

if (err) {
    return res.status(500).json(error: {msg: err.message, stack: err.stack});
}
好吧,这很简单,但最重要的是我们要检测:嘿,如果发生错误,把这个东西射给客户

但如果它不是一个500内部?正如我所知,错误的请求错误像客户端错误一样发送,并且在提示符中有自己的堆栈、类型和消息,对吗

在阅读中,我找到了URIError构造函数,它指向一个实例,该实例表示使用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返回给客户端。

我通常通过定义我想要的路由来实现这一点:

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。

Hmm,我现在不太明白。您正在将所有路由定义为错误请求。。。确切地说,您如何知道URL的格式是否错误?对不起,我对这件事很陌生。不,首先定义你知道的路线——这些路线将被路由到相应的控制器。但是如果有人发送的请求没有路由处理程序,那么您将抛出400。如果要将所有代码粘贴到一个新文件中并运行它,您将看到当您点击/good、/alsogood和/bad时会发生什么。您也可以使用相同的机制在控制器中的任何位置抛出新错误。哦!我明白了,真的很简单。。。谢谢你!嗯,我现在不太明白。您正在将所有路由定义为错误请求。。。确切地说,您如何知道URL的格式是否错误?对不起,我对这件事很陌生。不,首先定义你知道的路线——这些路线将被路由到相应的控制器。但是如果有人发送的请求没有路由处理程序,那么您将抛出400。如果要将所有代码粘贴到一个新文件中并运行它,您将看到当您点击/good、/alsogood和/bad时会发生什么。您也可以使用相同的机制在控制器中的任何位置抛出新错误。哦!我明白了,真的很简单。。。谢谢你!