我不知道这样做的函数,有人知道吗?


当前回答

发送到自定义页面:

app.get('*', function(req, res){
  if (req.accepts('html')) {
     res.send('404', '<script>location.href = "/the-404-page.html";</script>');
     return;
  }
});

其他回答

Express-error-handler允许您为错误指定自定义模板、静态页面或错误处理程序。它还做了其他有用的错误处理,每个应用程序都应该实现,比如防止4xx错误DOS攻击,以及在不可恢复错误时优雅地关闭。以下是你如何做到你所要求的:

var errorHandler = require('express-error-handler'),
  handler = errorHandler({
    static: {
      '404': 'path/to/static/404.html'
    }
  });

// After all your routes...
// Pass a 404 into next(err)
app.use( errorHandler.httpError(404) );

// Handle all unhandled errors:
app.use( handler );

或者对于自定义处理程序:

handler = errorHandler({
  handlers: {
    '404': function err404() {
      // do some custom thing here...
    }
  }
}); 

或者对于自定义视图:

handler = errorHandler({
  views: {
    '404': '404.jade'
  }
});

404页面应该在调用app.listen.Express支持路由路径中的*之前设置。这是一个匹配的特殊字符 任何东西。这可以用来创建一个匹配所有请求的路由处理程序。

app.get('*', (req, res) => {
  res.render('404', {
    title: '404',
    name: 'test',
    errorMessage: 'Page not found.'
  })
})

我使用下面的处理程序来处理静态.ejs文件中的404错误。

把这段代码放在一个路由脚本中,然后通过app.use()在你的app.js/server.js/www.js(如果对NodeJS使用IntelliJ)要求file.js

您也可以使用静态的.html文件。

//Unknown route handler
 router.get("[otherRoute]", function(request, response) {
     response.status(404);
     response.render("error404.[ejs]/[html]");
     response.end();
 });

这样,运行中的快速服务器将响应一个正确的404错误,并且您的网站还可以包含一个正确显示服务器的404响应的页面。你也可以在404错误模板中添加导航栏,链接到你网站的其他重要内容。

我在定义所有路由后所做的是捕捉潜在的404并转发到错误处理程序,如下所示:

    const httpError = require('http-errors');

    ...

    // API router
    app.use('/api/', routes);
    
    // catch 404 and forward to error handler
    app.use((req, res, next) => {
      const err = new httpError(404)
      return next(err);
    });

    module.exports = app;

在某些情况下,404页面不能被写入并作为最后一个路由执行,特别是如果您有一个异步路由功能,从而引入了一个迟到的/路由。在这些情况下可以采用下面的模式。

var express = require("express.io"),
    app = express(),
    router = express.Router();

router.get("/hello", function (req, res) {
    res.send("Hello World");
});

// Router is up here.
app.use(router);

app.use(function(req, res) {
    res.send("Crime Scene 404. Do not repeat");
});

router.get("/late", function (req, res) {
    res.send("Its OK to come late");
});

app.listen(8080, function (){
    console.log("Ready");
});