sailsjs在创建两个模型时的错误处理
sailsjs error handling when creating two models
我是两个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.
相关文章:
- sailsjs在创建两个模型时的错误处理
- 在模型上生成自定义主干错误.保存成功
- 使用Backbone在模型更改时渲染表单会导致表单UI错误
- 保存模型返回错误
- Ember.js:路由返回多个模型,包括一个promise,给出错误
- 尝试从 Jasmine 访问主干模型时出现参考错误
- Durandal:在找不到视图/视图模型时处理 RequireJS 错误
- angularJS + 猫鼬: 类型错误: 无法读取未定义的属性“模型”
- 挖空视图模型绑定未定义错误
- 错误绑定引导日期时间选取器到模型角度
- 无法修复猫鼬覆盖模型错误
- 类型错误:“未定义”不是构造函数 - 主干模型
- JavascriptMVC - 保存模型时的验证错误
- 反应本机数据库模型未捕获错误
- 嵌套视图模型结构导致 ko.computing 错误
- Backbone.js:如何在处理模型属性时捕捉拼写错误
- ThreeJS中用*.obj文件加载的模型着色错误
- 使用Mongoose分页包时出现模型错误
- 获取主干模型错误
- AJAX函数的模型错误回调