Node.js nodejs express knex主详细记录更新
我有主(工作簿)和子(工作簿数据集)。我正在尝试更新主记录,同时(插入、更新或删除)子记录。除了不返回更新的子记录外,一切正常。我知道我在指定“then”时做错了什么,因为它总是asyc操作,所以在子更新完成之前已经返回了结果Node.js nodejs express knex主详细记录更新,node.js,express,master-detail,knex.js,yield-return,Node.js,Express,Master Detail,Knex.js,Yield Return,我有主(工作簿)和子(工作簿数据集)。我正在尝试更新主记录,同时(插入、更新或删除)子记录。除了不返回更新的子记录外,一切正常。我知道我在指定“then”时做错了什么,因为它总是asyc操作,所以在子更新完成之前已经返回了结果 var Promise=require('bluebird'); 返回knex.transaction(功能(trx){ 返回knex('workbook')。其中('workbookid',workbook.workbookid)。和其中('userid',workb
var Promise=require('bluebird');
返回knex.transaction(功能(trx){
返回knex('workbook')。其中('workbookid',workbook.workbookid)。和其中('userid',workbook.userid)
.更新(工作簿)
.then(函数(updateRecords){
return Promise.map(数据集、函数(数据集){
如果(dataset.workbookdatasetid&&dataset.workbookdatasetid==-1){
//除去
返回knex('workbookdataset')。其中('workbookid',workbook.workbookid')。和其中('datasetid',dataset.datasetid)
.delete();
}否则{
dataset.workbookid=工作簿.workbookid;
knex('workbookdataset')。其中('workbookid',workbook.workbookid')。和其中('datasetid',dataset.datasetid)
.then(函数(alreadyds){
如果(alreadyds.length==1){
//更新
返回knex('workbookdataset')。其中('workbookid',workbook.workbookid')。和其中('datasetid',dataset.datasetid)
.update(数据集)
}否则{
//插入
if(dataset.workbookdatasetid){
删除dataset.workbookdatasetid;
}
返回knex('workbookdataset')
.插入(数据集)
}
})
}
});
})
})
.then(函数(updateRecords){
return get工作簿(workbook.userid,workbook.workbookid);//返回更新的工作簿信息,但不返回更新的workbookdataset信息
});
在您拥有knex('workbookdataset')的行上,您需要一个返回
。其中('workbookid'
请查看一个。从knex返回
方法。它允许您从数据库返回插入/更新/删除的记录
另外,我建议您检查承诺链,确保在正确的位置返回正确的值
注意:这与问题无关,但如果您正在使用事务,请添加到您的查询。transacting(trx)
,以便在一个事务中而不是单独运行它们
knex('workbook')
.where('workbookid',workbook.workbookid)
.andWhere('userid', workbook.userid)
.update(workbook)
.returning('*')
.transacting(trx)
.then(data => {
console.log(data) // => [{id: 1, workbookid: 1, userid: 981,...}, ...]
})
你在用哪个数据库?哇!它工作了。真是太傻了。谢谢。(我用的是新身份证,他们不让我做标记作为答案)是的,明白了。谢谢。