Node.js 如果不在控制器中使用try-and-catch,如何全局处理express中的错误

Node.js 如果不在控制器中使用try-and-catch,如何全局处理express中的错误,node.js,express,Node.js,Express,我是个新手,我想知道是否存在全局错误捕获器。我正在开发一个已经存在的代码,创建了所有控制器,在所有控制器中实现try-and-catch将是新手。我需要一个全局错误捕捉器来检测代码中的中断并响应客户端。是否有用于此的现有库或现有代码实现。如果您的控制器不是异步的,您只需在注册所有路由后添加错误处理程序 const express=require('express'); 常量app=express(); 常数端口=3000; 应用程序获取(“/”,(请求,请求)=>{ 抛出新错误(“出了问题”);

我是个新手,我想知道是否存在全局错误捕获器。我正在开发一个已经存在的代码,创建了所有控制器,在所有控制器中实现try-and-catch将是新手。我需要一个全局错误捕捉器来检测代码中的中断并响应客户端。是否有用于此的现有库或现有代码实现。

如果您的控制器不是异步的,您只需在注册所有路由后添加错误处理程序

const express=require('express');
常量app=express();
常数端口=3000;
应用程序获取(“/”,(请求,请求)=>{
抛出新错误(“出了问题”);
});
//在此处添加更多路线
//错误处理程序
应用程序使用(功能(错误、请求、恢复、下一步){
//以上非异步路由的所有错误都将在此处处理
资源状态(500).发送(错误消息)
});
app.listen(端口);
如果控制器是异步的,则需要向控制器添加自定义中间件以处理异步错误。中间件示例取自

const express=require('express');
常量app=express();
常数端口=3000;
//异步控制器的错误处理程序中间件
const asynchHandler=fn=>(请求、恢复、下一步)=>{
回报承诺
.解决(fn(请求、回复、下一步))
.接住(下一个);
};
app.get('/',asynchHandler(async(req,res)=>{
抛出新错误(“出错了!”);
}));
//在此处添加更多路线
//错误处理程序
应用程序使用(功能(错误、请求、恢复、下一步){
//以上异步和非异步路由的所有错误都将在此处处理
资源状态(500).发送(错误消息)
})
app.listen(端口);
,请参阅本文档