2012-03-15 1 views
0

Je rencontre des problèmes lorsque j'essaie de supprimer ou de mettre à jour une ligne à l'aide de Sequelize JS. Lorsque je tente de faire quelque chose comme ça (sur la mise à jour):Problèmes de mise à jour et de suppression sur 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}); 
    }); 
}); 

Ou (sur la suppression):

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}); 
}); 

Il montre une erreur:

return (typeof obj == 'object') && !obj.hasOwnProperty('length') 

TypeError: Impossible d'appeler méthode 'hasOwnProperty' de null at Object.isHash

Est-ce que quelqu'un kn Qu'est-ce qui se passe?

+0

quelle version utilisez-vous? ce qui est intégré dans la deuxième ligne? – sdepold

+0

Bonjour. J'utilise la version 1.3.7. "embed" serait la réponse de la méthode find (qui renvoie la ligne correcte). –

Répondre

1

Je suppose que vous utilisez mal. Si vous utilisez la méthode find(), vous devez passer un objet à l'intérieur. Comme le suivant;

Embed 
    .findAll({ "id": parseInt(req.body.id) }) 
    .then(function(embed) { ... }); 

Et ce code retourne un tableau de la promesse. Donc, vous ne pouvez pas l'utiliser directement comme embed.updateAttributes(...). Vous devez utiliser comme ça; embed[0].updateAttributes(...).

Ou vous pouvez utiliser comme ceci;

Embed 
    .findOne({ "id": parseInt(req.body.id) }) 
    .then(function(embed) { embed.updateAttributes(...); }); 

Parce que findOne() renvoie simplement un objet que vous trouvez.

Et .. j'ai vu maintenant, ce poste est très vieux. Et la méthode .find() a été dépréciée. J'ai donc remplacé la méthode find() par findAll(). Je pense que ceux-ci font le même processus.

Questions connexes