创建两个模型时的sailsjs错误处理
Posted
技术标签:
【中文标题】创建两个模型时的sailsjs错误处理【英文标题】:sailsjs error handling when creating two models 【发布时间】:2016-05-15 11:46:33 【问题描述】:我是两个 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 是在查询完成之前处理的。等待查询的正确方法是什么?
布鲁诺
【问题讨论】:
【参考方案1】:首先,您的代码将无法运行,因为 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);
您应该了解回调:callbackhell 和 node.js/sails.js 中的异步函数。
【讨论】:
你会推荐哪个? @Bruno first with async 更加优雅。但是,如果您需要两个错误,则需要使用第二个。 有道理,非常感谢您的解释以上是关于创建两个模型时的sailsjs错误处理的主要内容,如果未能解决你的问题,请参考以下文章
posix_spawn() :使用 posix_spawn() 时的错误处理问题
模型创建时的简单 RNN Python Tensorflow 错误