在使用Sequelize JS尝试删除或更新行时,我遇到了一些麻烦。 当我尝试做这样的事情时(更新时):
Embed.find(parseInt(req.body.id, 10)).success(function(embed) {
embed.updateAttributes({
NOME : req.body.name,
EMBED : req.body.embed
}).success(function() {
res.json({"success" : true});
}).error(function() {
res.json({"success" : false});
});
});
或(删除时):
Embed.find(parseInt(req.body.id, 10)).success(function(embed){
embed.destroy().success(function(e) {
console.log(e);
if(e && e.deletedAt) {
res.json({"success": true});
}
}).error(function(e){
console.log(e);
});
}).error(function(){
res.json({"success": false});
});
显示错误:
return (typeof obj == 'object') && !obj.hasOwnProperty('length')
TypeError:无法调用方法' hasOwnProperty'为null 在Object.isHash
有谁知道发生了什么事?
答案 0 :(得分:1)
我猜你错了。如果使用find()
方法,则必须在其中传递对象。如下所示;
Embed
.findAll({ "id": parseInt(req.body.id) })
.then(function(embed) { ... });
此代码返回promise中的数组。因此,您无法直接将其用作embed.updateAttributes(...)
。你必须这样使用; embed[0].updateAttributes(...)
。
或者你可以这样使用;
Embed
.findOne({ "id": parseInt(req.body.id) })
.then(function(embed) { embed.updateAttributes(...); });
因为findOne()
只返回您找到的对象。
而且......我现在看到,这篇文章很老了。而.find()方法已被弃用。因此,我将find()
方法替换为findAll()
。我认为这些都在做同样的过程。