当GET路径不存在时,如何自动返回404?

时间:2018-01-05 15:09:19

标签: node.js express handlebars.js http-status-code-404

我使用NodeJS,Express和Handlebars(模板引擎)来构建Web应用程序。目前,我正在尝试在用户输入不存在的URL时(或者他们可能无法访问它时)自动重定向用户。

以下命令返回索引页:

router.get('/', (req, res) => {
    res.render('index/index');
});

但我怎么做这样的事情:

router.get('/:ThisCouldBeAnything', (req, res) => {
    res.render('errors/404');
});

以下示例来自Github:

说我输入此网址:

https://github.com/thispagedoesnotexist

它会自动返回404.如何在我的应用程序中实现它?

提前致谢。

3 个答案:

答案 0 :(得分:2)

在所有路由处理程序之后使用中间件来捕获不存在的路由:

app.get('/some/route', function (req, res) {
    ...
});

app.post('/some/other/route', function (req, res) {
    ...
});

...

// middleware to catch non-existing routes
app.use( function(req, res, next) {

    // you can do what ever you want here
    // for example rendering a page with '404 Not Found'
    res.status(404)
    res.render('error', { error: 'Not Found'});

});

答案 1 :(得分:0)

完成所有其他路线后,您可以添加:

app.get('*', (req, res) => {
  res.render('errors/404');
});

或者,您可以在所有其他中间件和路由之后使用中间件功能。

app.use((req, res) => {
  res.render('errors/404');
});

所以你最终会得到一些看起来像的东西:

//body-parser, cookie-parser, and other middleware etc up here

//routes
app.get('/route1', (req, res) => {
  res.render('route1');
});

app.get('/route2', (req, res) => {
  res.render('route2');
});

//404 handling as absolute last thing
//You can use middleware
app.use((req, res) => {
  res.render('errors/404');
});

//Or a catch-all route
app.get('*', (req, res) => {
  res.render('errors/404');
});

答案 2 :(得分:0)

我看到你有明确的标签。您所要做的就是包含一个包含

的默认处理程序
app.get('*', (req, res,next) => {
     res.status(404).render('error.ejs')
});

例如

import numpy as np

a = []
for x in range(1,6):
    for y in range(1,6):
        a.append([x,y])
a = np.array(a)
print(f'Type(a) = {type(a)}.  a = {a}')