当前位置: 首页 > 面试题库 >

Node.js处理不受支持的URL和请求类型

慕兴平
2023-03-14
问题内容

我想在我的Web服务中添加一个选项来处理不受支持的URL,我应该提到我正在使用Express。为了处理错误的网址(代码404),我尝试使用

app.use(app.router);

但是显然它已被弃用,我还可以使用其他什么解决方案?我看到了建议的解决方案,但我想先听听其他选择。

另外, 我的Web服务支持一些HTTP请求类型,例如GET和POST,如何正确响应不支持的请求类型?例如DELETE。

我想要的行为是在发生404错误的情况下,我将返回所有适当的响应消息。如果请求不受支持,也是如此。

例如:

response.status(404).json({success: false,msg: 'Invalid URL'});

问题答案:

Express中所有未处理请求的404处理程序通常如下所示:

app.use(function(req, res, next) {
    res.status(404).sendFile(localPathToYour404Page);
});

您只需将此作为您注册的最后一条路由,如果没有其他路由处理该请求,它将被调用

这还将捕获您不支持的方法,例如DELETE。如果要基于请求定制响应,则可以将所需的任何检测和定制代码放入上面的处理程序中。

例如,如果您要检测DELETE请求,则可以执行以下操作:

app.use(function(req, res, next) {
    if (req.method === "DELETE") {
        res.status(404).sendFile(localPathToYour404DeletePage);
    } else {
        res.status(404).sendFile(localPathToYour404Page);
    }
});

或者,如果您的响应是JSON:

app.use(function(req, res, next) {
    let obj = {success: false};
    if (req.method === "DELETE") {
        obj.msg = "DELETE method not supported";
    } else {
        obj.msg = "Invalid URL";
    }
    res.status(404).json(obj);
});

一些参考:

Express常见问题解答:如何处理404响应?

Express自定义错误页面

而且,在使用它时,您可能还应该放入Express错误处理程序:

// not that this has four arguments compared to regular middleware that
// has three arguments
app.use(function (err, req, res, next) {
  console.error(err.stack)
  res.status(500).send('Something broke!')
});

这使您可以处理任何中间件遇到错误并称为的情况next(err)



 类似资料:
  • 问题内容: 我正在尝试运行以下代码: 但发生以下错误: XMLHttpRequest无法加载file:///home/93579551515/Desktop/Angular/p1.html。跨源请求仅支持HTTP。 我不想在网络服务器上运行它。 问题答案: 您可以添加模板,如和你通过将它们内部的标签,如在文档中提到。 然后,将不再需要发出AJAX请求来获取它们。 请注意,这些元素必须出现 在后面

  • 问题内容: 我正在使用以下代码提出AJAX请求: 但是从Google Chrome JavaScript控制台,我一直收到此错误: XMLHttpRequest无法加载文件:/// C:/xampp/htdocs/webname/resources/templates/signup.php。跨源请求仅受HTTP支持。 问题是 signup.php 文件托管在我的本地Web服务器上,这是所有网站的运

  • 在我的项目中,我面临着一个非常奇怪的问题。它与使用spring反应式webclient bulider调用rest API有关。它在本地和prod上也可以正常工作,但在向同一个endpoint发出3或4个请求后,会异常地给出以下错误。“org.springframework.web.server.MethodNotAllowedException:405方法\u不允许“请求方法'T'不受支持”这是

  • 本文向大家介绍node.js中的favicon.ico请求问题处理,包括了node.js中的favicon.ico请求问题处理的使用技巧和注意事项,需要的朋友参考一下 这样的代码在请求时会出现两条请求: 第一条时URL地址为用户输入的客户端请求的目标URL地址,"/"代表用户的目标url地址为web应用程序的根目录. 第二个目标URL地址问浏览器为页面在收藏夹中的显示图标.默认为favicon.i

  • 多请求支持 控制台编辑器允许您编写相互层叠的多个请求,像在控制台章节展示中那样,您可以通过定位光标并使用动作菜单向 Elasticsearch 提交请求。类似的,您可以一次选择多个请求: 图 5. 选择多个请求 控制台会依次提交请求到 Elasticsearch ,并将 Elasticsearch 返回的结果显示在右边窗口。这在调试问题或在多个场景中尝试查询组合时会非常方便。 选择多个请求还允许您

  • 我正在尝试编写一个服务器,它通过使用唯一生成的ID来跟踪其客户端。这个想法是,如果我是管理员,并且我想从服务器上引导某人,我就为该客户机查找适当的ClientID(它实际上只是一个字符串;唯一的区别是ClientID类负责确保没有两个客户机被分配了相同的ID),然后输入一个命令,如“kick 12”(如果我想要kick的人的ClientID碰巧是12)。我认为这是可行的,因为我认为可能是通过内部使