使用app.get调用错误的端点时该如何处理?

时间:2018-09-28 09:20:42

标签: node.js api express http-status-code-403

我定义了几个端点。我正在对所有这些进行自动化,此外还定义了一些我应该得到错误的方案。

例如,端点之一是:'/ v1 / templates'。

现在,想象一下用户输入'/ v1 / templatess'错误。

我正在使用app.get处理这样的已知端点:

app.get(
    '/v1/contents/:template_component_content_id',
    controllers.template_component_contents.getById.bind(controllers.template_component_contents)
);

有没有办法说,如果调用的端点与任何app.get()选项都不匹配,则抛出错误?

谢谢。

3 个答案:

答案 0 :(得分:3)

您可以使用快速处理程序处理404。

在您的主要express文件(可能是index.js或app.js)中,仅放在路由中间件之后。

app.use("/v1", your_router);

// catch 404 and forward to error handler
app.use((request, response, next) => {
  // Access response variable and handle it
  // response.status(404).send("Your page is not found"))
  // or
  // res.render("home")
});

您也可以通过以下附加路线来实现此目标

app.get('*', (req, res) => {})

但这是不可取的,因为它是正则表达式操作,并且表示已经提供了内置处理程序来处理404路由。

答案 1 :(得分:2)

app.js中,将其写在您需要routes的位置

const express = require('express');
const app = express();

app.use((req, res, next)=>{
  res.status(404).send({message:"Not Found"});
});

如果要显示后端的某些页面

app.use((req, res, next)=>{
  res.render('./path/to/file');
});

有关更多参考,请检查此github项目

nodejs_boiler_plate/app.js

答案 2 :(得分:1)

尝试类似的东西

app.get('*', (req, res) => {
  res.send({error: "No routes matched"});
  res.end();
})

将此代码添加为您路线中的最后一条路线,我希望如此会成功。