在尝试Sails.js时,我正在编写一个应用程序,该应用程序从第三方API导入数据并将其保存到MySQL表中。基本上,我试图将数据同步到我的应用程序中以进行进一步的分析,更新记录或根据需要创建新记录。
我已经浏览了Sails的API,并且看到了用于查找,创建和更新记录的方法,但是没有内置的方法可以根据情况插入/更新记录。我是否忽略了某些事情,还是需要自己实现?
如果我必须自己实现这一点,那么有人知道插入/更新的良好设计模式吗?
我认为这可能是这样的……
_.each(importedRecords, function(record){
MyModel.find({id: record.id}).exec(function findCB(err, found){
if(found.length){
MyModel.update(record.id, task).exec(function(err, updated){
if(err) { //returns if an error has occured, ie id doesn't exist.
console.log(err);
} else {
console.log('Updated MyModel record '+updated[0].name);
}
});
}else{
MyModel.create(record).exec(function(err, created){
if(err) { //returns if an error has occured, ie invoice_id doesn't exist.
console.log(err);
} else {
console.log('Created client record '+created.name);
}
});
}
});
});
我是朝着正确的方向前进,还是有一个更优雅的解决方案?
另外,我在这个应用程序中处理许多不同的模型,这意味着要在我的每个模型中重新创建此代码块。有没有一种方法可以扩展基本Model对象以为所有模型添加此功能。
谢谢,
约翰
最佳答案
我已经重写了关键的Mash代码,因此它的代码更少,并且更加通用。
现在,您可以像调用findOrCreate一样调用updateOrCreate。它看起来像这样:
module.exports.models = {
updateOrCreate: function(criteria, values){
var self = this; // reference for use by callbacks
// If no values were specified, use criteria
if (!values) values = criteria.where ? criteria.where : criteria;
return this.findOne(criteria).then(function (result){
if(result){
return self.update(criteria, values);
}else{
return self.create(values);
}
});
}
};
这样,您可以以相同的方式编写条件。无需处理 key ,并且代码非常简单。
关于javascript - Sails.js模型-插入或更新记录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25936910/