Express返回服务器HTML错误页面而不是res.json错误信息
ExpressJS 是在NodeJS之上构建的后端Web应用程序框架,它帮助我们管理服务器和路由。它具有中间件、模板和调试等强大的功能,帮助我们编写高效且更快的代码。它在构建Web应用程序方面非常有用。
在本文中,我们将看到为什么“Express返回服务器的自动HTML错误页面,而不是res.json错误消息”,以及如何解决这个问题。
当我们未为特定路径定义路由时,用户尝试访问该路径或者在我们的网页上发生错误(比如无法访问数据库、服务器问题),Express会返回一个服务器自动HTML错误页面。
需要注意的是,不同的开发人员希望以自己的方式处理错误-有些人可能希望为错误创建自己的页面,有些人可能希望向用户显示错误消息,其他人可能希望向用户发出警告或将其重定向到另一个页面,或者以上所有操作。
在本文中,我们将看到如何提供JSON错误消息而不是HTML错误页面。
示例: Express生成一个服务器自动HTML页面。
const express = require('express');
const app = express();
app.set('view engine','ejs');
app.get('/', (req, res) => {
res.render('home')
})
app.get('/about', (req, res) => {
res.render('about')
})
app.listen(3000);
在上面的代码中,我们定义了两个路由(/ route)用于主页和(/about route)用于关于页面。但是我们没有为导航栏中的登录链接定义一个名为/signin的路由。
因此,我们的页面的功能如下:

输出:

在这里,我们可以看到,我们没有为/signin定义任何路由,所以当用户尝试发送到/signin路由的请求时,Express会返回一个自动生成的HTML页面。所以我们需要阻止它,并给出我们自己的JSON错误消息。
解决方案: 解决方法非常简单。我们可以通过添加一个 中间件函数 来解决,这是Express中的解决方法,它可以给我们提供所需的结果。
什么是中间件函数?
当服务器接收到请求并在响应发送到客户端之前触发时,它会被触发。因此,在使用中间件函数时,有不同的目的,比如进行API调用、获取一些来自数据库的数据、错误处理等。在这里,我们需要中间件来处理当我们向/signin路由发送请求时可能出现的错误。
所以我们需要做的就是更新我们的app.js,通过添加一个中间件函数来处理没有匹配的路由时被触发。它会给出一个JSON错误消息(即页面未找到),而不是一个HTML页面。
const express = require('express');
const app = express();
app.set('view engine', 'ejs');
app.get('/', function (req, res) {
res.render('home');
});
app.get('/about', function (req, res) {
res.render('about');
});
// Error Handling Middleware which gets
// trigger when no route matches.
app.use(function (req, res) {
res.status(401).json({ error: "Page not Found" });
})
app.listen(3000);
输出:

通过这种方法,我们能够向用户返回一个JSON错误信息而不是由服务器生成的HTML页面。当我们想处理错误并向用户发送JSON格式时,这是非常方便的。
极客教程