【问题标题】:Route 404.html for Express appExpress 应用程序的 Route 404.html
【发布时间】:2015-01-03 12:30:07
【问题描述】:

我已经看到很多解决这个问题的帖子,但似乎没有一个对我有用,而且许多解决方案都使用了已弃用的方法。

我已经设置了静态文件目录:

app.use(express.static(__dirname + "/public", {maxAge: 86400000*30 }));

然后我在该公共目录中有一个自定义的 404.html 页面。现在,任何不正确的 URL 都应该被路由到该 404.html 页面。我尝试了以下方法:

app.use(function(req, res, next){
  res.render("404.html", { url: req.url });
});

但我得到了回应:

Error: Cannot find module 'html'

我做错了什么,为什么这么简单的事情这么难?

【问题讨论】:

  • Express 希望有一个适用于所有文件类型的渲染器,即使是像 HTML 这样的静态文件。有关更多信息,请参阅此答案:stackoverflow.com/a/4531225/502126
  • 如果您使用404.html作为模板,它是什么模板? ejs?玉?车把?还有什么?或者它真的不是模板,如果没有匹配的路由处理程序,您只想显示静态内容?
  • @mscdex 只是一个普通的 html 页面,里面没有模板或动态内容。不使用翡翠或ejs或类似的东西。同样,我的应用程序也将 index.html 作为常规 html 页面提供服务,因为 Express 指向公用文件夹。

标签: javascript html node.js express


【解决方案1】:

在所有其他中间件和路由处理程序之后添加类似这样的内容:

app.use(function(req, res) {
  res.sendFile(__dirname + '/public/404.html');
});

【讨论】:

  • 我收到TypeError: Object #<ServerResponse> has no method 'sendFile'
【解决方案2】:

尝试将您的 express 版本升级到最新版本

已编辑(来自@mscdex 的更正版本)

app.get('/api', function(req, res) {
   .....
   res.status(404).sendFile(__dirname + '/public/404.html');
});

http://expressjs.com/api.html#res.status

【讨论】:

  • 我使用的是 Express 4.7.2。这是一个非常新的版本。升级它将如何进一步帮助我处理 404 路由?
  • 我没有足够的声誉来评论这篇文章。我的回复是对来自@mscdex 回复 的评论“我得到 TypeError:Object # 没有方法 'sendFile'”
  • 这似乎现在可以工作了,我还必须将代码 sn-p 放在我所有的 API 路由下面,否则他们什么也没做。谢谢
猜你喜欢
  • 2021-01-19
  • 2018-11-05
  • 2019-10-05
  • 1970-01-01
  • 2021-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-06
相关资源
最近更新 更多