node.js – 一种防止Sequelize中高度嵌套的代码进行错误处理的方法?

前端之家收集整理的这篇文章主要介绍了node.js – 一种防止Sequelize中高度嵌套的代码进行错误处理的方法?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个表单,当提交后某些内容没有正确时,我希望能够向用户提供特定的错误消息.我使用Sequelize作为我的ORM,并且返回的承诺对所有嵌套代码都有点混乱.

例如,如果我们要更新两个模型:用户和照片:

models.User.find({where: {name: 'bob' }}).then(function(user) {
    if(user) {
        user.updateAttributes({email: email}).then(function(user) {
            models.Photo.find({where: { hash: hash}}).then(function(photo) {
               if(photo)
                   res.json({"message":"updated"});
               else
                   res.status(404).json({"error": "Could not find Photo"});
            }).catch(err) {
               res.status(500).json({"error": err});
            });
        }).catch(function(err) {
            res.status(500).json({"error": err});
        });
    } else {
        res.status(404).json({"error": "Could not find user"});
    } 
}).catch(function(err) {
    res.status(500).json({"error": err});
});

如果我在表单中有10个字段要更新,那么所有嵌套代码都会变得霸道.

如果我希望有特定的错误描述,还有更易读的代码,可以给出什么建议?是否有可能在一个代码块中捕获所有404和500错误而不是像我一样分解它们?

解决方法

您可以使用promise链接和帮助方法代码减少到一系列3 .thens和单个.catch:
function notFoundError(model) {
    var e = new Error('Could not find ' + model);
    e.statusCode = 404;
    throw e;
}

models.User
    .find({where: {name: 'bob'}})
    .then(function (user) {
        if (user) {
            return user.updateAttributes({email: email});
        } else {
            notFoundError('user');
        }
    })
    .then(function (user) {
        return models.photos.find({where: {hash: hash}});
    })
    .then(function (photo) {
        if (photo)
            res.json({"message": "updated"});
        else
            notFoundError('photo');
    })
    .catch(function (err) {
        if (err.statusCode) {
            res.status(err.statusCode);
        } else {
            res.status(500);
        }
        res.json({'error': err.message});
    });
原文链接:https://www.f2er.com/nodejs/241283.html

猜你在找的Node.js相关文章