sailsjs在创建两个模型时的错误处理

sailsjs error handling when creating two models

本文关键字:模型 错误 处理 两个 创建 sailsjs      更新时间:2023-09-26

我是两个nodejs和sails的新手。我试图在一个动作中创建两个模型。我的问题是如何处理这两个查询中可能出现的错误。

当前代码:

new: function (req, res) {
    var errorArray = [];
    var data = req.allParams();
        User.create({
            username: data.username,
            password: data.password,
            device_id: data.device_id,
            own_number: data.own_number,
            mobile_numbers: data.mobile_numbers
        }).exec(function (err, user) {
            if(err){
            errorArray.push(err);
            }
        });
        Mobile_number.create({
          number: data.own_number,
          number_id: this.hash(data.own_number)
        }).exec(function(err, mobile_number){
          sails.log(err);
          if(err){
            errorArray.push(err);
          }
       });
       if(errorArray.length == 0){
         return res.ok('success');
       }else {
        return res.send(errorArray.toString());
       }    
  }

此代码的问题在于,末尾的if是在查询完成之前处理的。等待查询的正确方式是什么?

Bruno

首先,您的代码将无法工作,因为node.js是异步的。因此,在执行函数之前,您要检查是否存在错误。以下是两种解决方案:

您可以使用async.series。若您使用它,若第一个方法失败,它将停止执行,并返回错误。如果成功,它将进入第二种方法。

async.series([
        function(callback) {
            User.create({
                username: data.username,
                password: data.password,
                device_id: data.device_id,
                own_number: data.own_number,
                mobile_numbers: data.mobile_numbers
            }).exec(callback);
        },
        function(callback) {
            Mobile_number.create({
                number: data.own_number,
                number_id: this.hash(data.own_number)
            }).exec(callback);
        }
    ],
    function(error, results) {
        // error first finished 
        if(error)
            res.send('error');
        else
            res.send('success');
    }
);

或者你可以用传统的回调方式。

new: function(req, res) {
    var errorArray = [];
    var data = req.allParams();
    var mobileCreateCallback = function(err, mobile_number, user) {
        sails.log(err);
        if (err) {
            errorArray.push(err);
        }
        if (errorArray.length === 0) {
            sails.log(user, mobile_number);
            return res.ok('success');
        } else {
            return res.send(errorArray.toString());
        }
    };
    var userCreateCallback = function(err, user) {
        if (err) {
            errorArray.push(err);
        }
        Mobile_number.create({
            number: data.own_number,
            number_id: this.hash(data.own_number)
        }).exec(function(error, mobile_number) {
            mobileCreateCallback(error, mobile_number, user);
        });
    };
    User.create({
        username: data.username,
        password: data.password,
        device_id: data.device_id,
        own_number: data.own_number,
        mobile_numbers: data.mobile_numbers
    }).exec(userCreateCallback);
}

您应该了解回调:node.js/sails.js.

中的回调和异步函数