gpt4 book ai didi

node.js - Node.js&Express-是否曾经创建Error对象并将其传递给中间件而没有先在路由内部声明?

转载 作者:行者123 更新时间:2023-12-03 08:20:02 28 4
gpt4 key购买 nike

环境: Node.js,快速

下面的模式会将所有同步和异步Error对象转发到我的错误处理中间件。

app.get('/', wrapAsync(async function(req, res, next) {

// synchronous error
throw new Error('oops');

// asynchronous error
//next( new Error('oops I did it again');

res.send('hello world');
}));

function wrapAsync(fn) {
return function(req, res, next) {
fn(req, res, next).catch(next);
};
}

app.use( function(error, req, res, next) {

res.send(error);
});

但是,如果在我未设置Error对象的部分代码中发生意外错误该怎么办? node.js或Express是否会检测到我的路由中发生错误,是否会创建一个Error对象,并通过wrapAsync包装函数将其转发给我的中间件?这对我来说很难全神贯注,因为我不确定如何测试意外情况。

是否有一种模式可以确保路由中发生的所有可能的错误都转发到错误处理中间件,而不会导致服务器崩溃?

最佳答案

However what if an unexpected error occurs in part of my code where I didn't set up an Error object?



如果除了您自己的代码之外还有其他东西抛出(编程错误或意外的异常),那么抛出的任何东西都会创建自己的异常。按照惯例,但不完全要求您抛出Error对象。自定义代码可能会抛出一个字符串或它自己的对象,尽管这不是通用约定。

解释器生成的异常(例如TypeError)将始终抛出某种类型的Error对象。

Will node.js or Express detect that an error occurred in my route, create an Error object and forward it to my middleware through the wrapAsync wrapper function?



这不是真正考虑的正确方法。它不是Express或node.js。不管是什么代码导致或首先引发了异常(手动抛出异常或解释器遇到导致异常的错误。这都是异常及其产生的原因。因为您将内容包装在 async函数中,您可能会在 .catch()处理程序中看到该异常(及其相关的Error对象)。

但是,在某些情况下您仍然看不到异常。如果包装器中的某些异步代码使用普通回调(而不是promise)并在该普通异步回调中引发异常,则包装器将不会捕获该异常(什么也不会)。这就是为什么此体系结构中的所有异步代码都应仅使用 promise 的异步功能的原因,因为它可以启用您所依赖的自动错误传播。

Is there a pattern that ensures that all possible errors that occur in a route are forwarded to the error handling middleware without crashing the server?



否。如果函数使用普通的,没有 promise 的异步回调,则不会。如上所述,在这种情况下,错误不会传播到您的包装器中。

仅供引用,请参阅 Express middleware cannot trap errors thrown by async/await, but why?以了解将拒绝的 promise 检测构建到Express中的方案。还有Express表弟 koa作为其体系结构的一部分自动执行此操作。

关于node.js - Node.js&Express-是否曾经创建Error对象并将其传递给中间件而没有先在路由内部声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60029237/

28 4 0
文章推荐: php - 无法将Silverstripe 4错误日志写入电子邮件
文章推荐: node.js - 使用Express,如何实现常用的包装器功能来处理错误
文章推荐: jquery -
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com