Node.js 使用内置nodejs连接中间件

Node.js 使用内置nodejs连接中间件,node.js,express,exception-handling,connect,Node.js,Express,Exception Handling,Connect,在nodejs connect中间件中,错误报告的默认方式是调用next(err),如果不应向用户显示进一步的消息,通常后跟return。例如,错误处理程序可能会显示一个普通的http 500页面 但是,某些错误可能会导致异常,包括使用的第三方LIB引发的异常。然而,connect(或express?)中间件堆栈捕获这些数据,并将它们重定向到错误处理程序 我在一些讨论之后说,应该在出现异常时重新启动nodejs,因为某些状态可能已损坏。然而,connect(或express)制造商似乎不同意这种

在nodejs connect中间件中,错误报告的默认方式是调用
next(err)
,如果不应向用户显示进一步的消息,通常后跟
return
。例如,错误处理程序可能会显示一个普通的http 500页面

但是,某些错误可能会导致异常,包括使用的第三方LIB引发的异常。然而,connect(或express?)中间件堆栈捕获这些数据,并将它们重定向到错误处理程序

我在一些讨论之后说,应该在出现异常时重新启动nodejs,因为某些状态可能已损坏。然而,connect(或express)制造商似乎不同意这种观点


这样,在中间件内部抛出异常是否可行?或者这个baypass可能会连接一些内部操作吗?

我认为“应该重新启动节点”建议与出现未处理/未捕获的异常(通常会使服务器完全崩溃)有关。虽然您可以在全局级别捕获uncaughtException事件,但在这一点上,您实际上应该只进行正常的关闭和重新启动。如果connect捕捉到异常,您应该可以。话虽如此,如果您使用的是Express/Connect,您可能只需要对自己的代码使用next(err)约定即可。Ok。但是,如果可以使用
throw
,我更喜欢它,原因有三:1)
next(err)
对于没有潜入编码的人,有时甚至是我,在第一眼看到它时会产生误导,2)
next(err)
将需要额外的
返回
,因此在许多情况下,如果使用
抛出
消除复杂性,则需要一个块,因为我必须在隐藏的代码中预期未锁定的
抛出
s。从隐藏的代码捕获抛出有点难看,因为我必须期望连接只捕获那些允许进一步正常操作的,但肯定是我自己扔的。是否有特殊的过滤,或者连接错误处理程序中间件是否会从中间件内部接收每个异常?我认为如果您想使用throw,并且您的异常被捕获,那么您就可以了。您也可以创建自己的错误处理程序(arity为4的中间件
myFunc(err、req、res、next)
是一个错误处理程序)。关于你的优点/缺点,我的想法是1)
next(err)
对于node新手来说是比较容易混淆的事情,所有的事情都考虑到:-),2)不确定在大多数情况下你是否需要一个额外的整块,只是一个
if(err)return next(err)在许多情况下。3) 关于以一种方式处理所有错误,这一点很公平。好的,我只是尝试在当前项目中的任何地方抛出
错误,并将在出现任何警告时再次报告。