Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Node.js/Express是否可以从IIFE内部执行next()错误并前进到错误处理中间件?_Express_Error Handling_Iife - Fatal编程技术网

使用Node.js/Express是否可以从IIFE内部执行next()错误并前进到错误处理中间件?

使用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) {

问题:使用Express是否可以从IIFE内部返回错误并前进到我的错误处理中间件?
背景:用于创建包装语句的容器。我找不到解决这个问题的方法,我想知道我是否使用了错误的基本模式

简化示例:

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-如果您希望捕获的粒度是这样的,那么包装整个路线就可以了。