gpt4 book ai didi

node.js - 如何在不使用 Controller 中的 try 和 catch 的情况下全局处理 express 中的错误

转载 作者:行者123 更新时间:2023-12-01 23:48:45 24 4
gpt4 key购买 nike

我对表达很陌生,想知道是否存在全局错误捕获器。我正在处理一个已经创建的所有 Controller 的现有代码,在所有 Controller 中实现 try 和 catch 将是新手。我需要一个全局错误捕捉器来检测代码中的中断并响应客户端。是否有现有的库或现有的代码实现。

最佳答案

如果您的 Controller 不是异步的,您可以在注册所有路由后简单地添加错误处理程序

const express = require('express');
const app = express();
const port = 3000;

app.get('/', (req, res) => {
throw new Error('Something went wrong');
});

// Add more routes here

// Error handler
app.use(function (err, req, res, next) {
// All errors from non-async route above will be handled here
res.status(500).send(err.message)
});

app.listen(port);

如果您的 Controller 是异步的,您需要向 Controller 添加一个自定义中间件来处理异步错误。中间件示例取自 this answer

const express = require('express');
const app = express();
const port = 3000;

// Error handler middleware for async controller
const asyncHandler = fn => (req, res, next) => {
return Promise
.resolve(fn(req, res, next))
.catch(next);
};

app.get('/', asyncHandler(async (req, res) => {
throw new Error("Something went wrong!");
}));

// Add more routes here

// Error handler
app.use(function (err, req, res, next) {
// All errors from async & non-async route above will be handled here
res.status(500).send(err.message)
})

app.listen(port);

关于node.js - 如何在不使用 Controller 中的 try 和 catch 的情况下全局处理 express 中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63775592/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com