使用Node.js/Express是否可以从IIFE内部执行next()错误并前进到错误处理中间件?
问题:使用Express是否可以从IIFE内部返回错误并前进到我的错误处理中间件?使用Node.js/Express是否可以从IIFE内部执行next()错误并前进到错误处理中间件?,express,error-handling,iife,Express,Error Handling,Iife,问题:使用Express是否可以从IIFE内部返回错误并前进到我的错误处理中间件? 背景:用于创建包装语句的容器。我找不到解决这个问题的方法,我想知道我是否使用了错误的基本模式 简化示例: app.get('/', function(req, res, next) { (async function() { try { let example = await someLogic(x); } catch(err) {
背景:用于创建包装语句的容器。我找不到解决这个问题的方法,我想知道我是否使用了错误的基本模式 简化示例:
app.get('/', function(req, res, next) {
(async function() {
try {
let example = await someLogic(x);
} catch(err) {
return next(new Error('oops'));
}
})();
console.log('main endpoint');
});
app.use(function(err, req, res, next) {
console.log('my error', err.message);
});
使用Express是否可以从IIFE内部返回错误并前进到我的错误处理中间件
是的,很好用。它将调用next(err)
很好。但是,您的return
将仅从IIFE返回,并且在try/catch
之后,请求处理程序的其余部分仍将执行(不确定您是否希望执行)
仅供参考,将请求处理程序声明为
async
可能更简单,这样就不需要IIFE包装器了:
app.get('/', async function(req, res, next) {
try {
let example = await someLogic(x);
console.log('main endpoint');
// send some response here
} catch(err) {
return next(new Error('oops'));
}
});
令人惊叹的!我真正的路线是50线左右。在一次尝试/捕获中包装整个路线可以吗?或者这种做法不受欢迎吗?@myNewAccount-如果您希望捕获的粒度是这样的,那么包装整个路线就可以了。