首页 > 解决方案 > 如何在 ExpressJS 中为整个站点提供单个 404 页面?

问题描述

我正在缓慢但肯定地构建一个 Express Web 应用程序,并希望添加一个特定页面以在发生 404 响应时返回。这是我到目前为止所拥有的:

应用程序.js

app.get("*", function (req, res) {
res.send("What are you looking for???", 404);
});

这是在我的所有中间件、路由导入(我将它们模块化在其他文件中)之后,以及在侦听器触发以启动应用程序之前。就目前而言,只要根路由 (/) 上有 404,就会显示此文本,但当我在站点目录的更下方时不会显示此文本。例如,如果我在 /players/PageThatDoesNotExist 之类的子目录中,则不会显示错误页面并且应用程序超时。

我能做些什么来纠正这个问题并确保在应用程序上找不到页面时触发它?在此先感谢您的帮助。

标签: expressweb-applicationshttp-status-code-404

解决方案


您的代码的问题是您使用它覆盖所有其他路由并以 404 状态响应任何传入请求。尝试像这样注册 404 路由处理程序,并确保它遵循所有其他路由。

app.use(function(req, res){
    res.status(404).render('404.hbs');
});

然后呈现您的整个自定义 404 页面,或者

res.send('<h1>No page found</h1>');

带有一些字符串值的响应


推荐阅读