NodeJS 如何在Express App中返回404未找到页面?

qzlgjiam  于 2022-12-22  发布在  Node.js
关注(0)|答案(2)|浏览(279)

我有一个express应用程序,其中包含以下代码:

app.get('*', (req, res) => {
  res.send('404', {
    title: 404,
    name: 'James Olaleye',
    errorMessage: 'Page not found',
  });
});

但是,My IDE会发出有关此消息的警告:
表示弃用的res.send(状态,正文):使用res.status(状态).send(正文)代替
使用上面的代码,My Browser将以下有效负载作为JSON对象返回:

{
"title": 404,
"name": "James Olaleye",
"errorMessage": "Page not found"
}

我想要的是向用户显示一个404未找到页面,如何实现这一点?

gzszwxb4

gzszwxb41#

你有两个不同的问题
1:您正在使用旧方法响应请求,而不是使用此res.status(STATUS_CODE).send(BODY)
2:你正在发送一个json,但是你想显示一个404页面,在这种情况下,你需要发送一个html模板
因此您代码应该如下所示

app.get('*', (req, res) => {
  res.status(404).send("<div>404 Not Found</div>");
});
xu3bshqb

xu3bshqb2#

我更新了一下你的问题,使它更清楚,以供将来参考。
方法res.send被弃用,其中一个原因是它的用法过于模糊。服务器响应可以是很多东西,它可以是一个页面,它可以是一个文件,它可以是一个简单的JSON对象(您在这里看到的)。
在您的示例中,当您运行res.send(404,{ /*...*/ })时,express应用程序假定您要发送一个JSON对象,因此它就这样做了。
有多种可能的方法,以实现你想要的,但我会坚持最简单的解决方案。
如果你想以最简单的形式显示一个HTML页面,你实际上只需要修改你的代码就可以做到这一点:

app.status(404).send(`<h1>Page not found</h1>`)

这实际上将显示一个页面,而不是一个JSON对象。
如果愿意,您甚至可以定义整个HTML文件:

app.status(404).send(
`
<html>
<!DOCTYPE html>
<head>
<title>404</title>
</head>
<body>
 <h1>James Olaleye</h1>
 <h1>Page Not Found</h1>
</body>
</html>
`
)

这将是最快的方式来实现你想要的。
更进一步,您可以在应用中的某个位置创建HTML文件,然后发送该HTML文件。
如果您的原始程式码如下所示:
一个一个二个一个一个一个三个一个一个一个一个一个四个一个
这将允许您有多个HTML文件,您可以发送。
就像我说的,也有其他的选择,但这会使这个答案太长,超出范围。如果你有兴趣,你可以研究Using template engines with Express,并从下面的链接开始。
快乐编码:)

相关问题