Express错误处理-用于生产和开发的中间件
错误处理 是在程序或应用程序执行过程中检测和响应发生的错误的过程。在Web应用程序的上下文中,错误处理通常涉及检测在处理HTTP请求过程中发生的错误并适当地响应这些错误。有效的错误处理很重要,因为它可以帮助改善应用程序的可靠性和可用性。
Express 提供了中间件函数,用于处理在处理HTTP请求过程中发生的错误。这些中间件函数被添加到应用程序的中间件堆栈中,并在处理请求时发生错误时执行。
语法:
function errorHandler(err, req, res, next) {
// error handling code goes here
}
在生产中的错误处理: 设置项目。
步骤1: 为我们的项目创建一个目录,并将其设置为我们的工作目录。
$ mkdir gfg
$ cd gfg
步骤2: 使用npm init命令为我们的项目创建一个package.json文件。
npm init -y
步骤3: 现在安装Express。
npm i express
在这个示例中,我们定义了一个错误处理中间件函数,它将错误日志记录到控制台,并发送一个带有内部服务器错误状态码 500 的通用错误消息给客户端。我们还为根URL定义了一个路由处理程序,它只向客户端发送一个“Hello World!”的消息。为了测试错误处理中间件,我们故意添加了一个抛出错误的路由处理程序。
const express = require("express");
const app = express();
// Production error handling middleware
app.use(function (err, req, res, next) {
console.error(err);
res.status(500).send("Internal Server Error");
});
// Route handlers
app.get("/", function (req, res) {
res.send("Hello World!");
});
app.get("/error", function (req, res) {
throw new Error("Something went wrong!");
});
// Start the server
const port = process.env.PORT || 3000;
app.listen(port, function () {
console.log(`Server listening on port ${port}`);
});
运行代码的步骤:
步骤 1: 在终端中运行以下代码:
node index.js
步骤 2: 现在创建一个向“localhost:3000/error”发送GET请求来获取错误。您可以使用Postman或在任何Web浏览器中编写URL。
输出:

生产环境中的错误处理: 在这个示例中,我们定义了一个错误处理中间件函数,它将错误堆栈跟踪记录到控制台并使用500内部服务器错误状态代码将堆栈跟踪发送给客户端。我们还添加了一个检查,确保只有在开发模式下才使用此错误处理中间件。为了测试错误处理中间件,我们故意添加了一个抛出错误的路由处理程序。
const express = require("express");
const app = express();
// Development error handling middleware
if (app.get("env") === "development") {
app.use(function (err, req, res, next) {
console.error(err.stack);
res.status(500).send(`<pre>{err.stack}</pre>`);
});
}
// Route handlers
app.get("/", function (req, res) {
res.send("Hello World!");
});
app.get("/error", function (req, res) {
throw new Error("Something went wrong!");
});
// Start the server
const port = process.env.PORT || 3000;
app.listen(port, function () {
console.log(`Server listening on port{port}`);
});
运行代码的步骤:
步骤1: 在终端中运行以下代码:
node index.js
步骤2: 现在创建一个“localhost:3000/error”的GET请求来获取错误。您可以使用Postman或在任何Web浏览器中写入URL。
输出:

生产环境和开发环境中Express错误处理中间件的区别:
| 对比项 | 生产环境 | 开发环境 |
|---|---|---|
| 错误响应 | 通用错误信息 | 包含堆栈跟踪的详细错误信息 |
| 错误日志记录 | 有限的日志记录,例如控制台 | 广泛的日志记录,例如控制台、文件或服务 |
| 错误调试 | 有限的调试 | 包含堆栈跟踪的广泛调试 |
| 错误显示 | 用户友好的错误页面 | 技术错误信息或堆栈跟踪 |
| 错误信息 | 有限的信息 | 详细信息,例如请求详情 |
| 错误处理时间 | 最小化停机时间 | 最大化调试时间 |
| 中间件使用 | 标准中间件 | 基于NODE_ENV的条件中间件 |
极客教程