Sequelize js上的更新和删除问题

时间:2012-03-15 14:57:10

标签: node.js sequelize.js

在使用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

有谁知道发生了什么事?

1 个答案:

答案 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()。我认为这些都在做同样的过程。