Node.js => TypeError:Object [object Object]没有方法'save'

时间:2013-11-15 16:35:58

标签: node.js object orm save sequelize.js

我是Node.js的新手,我正在尝试运行一种插入查询。这是我的代码:

exports.savetea = function(req, res){

var quantity = req.query.quantity;

var Sequelize = require('sequelize');
var sequelize = new Sequelize('nodehmssm', 'root', 'root', {host: "localhost", port: 3306, dialect: 'mysql'});

var Tea = sequelize.import(__dirname + "/model/tea");

Tea.build({quantity: quantity, status: "active"}).save();

res.send("Tea added...");
};

我的tea.js文件如下:

module.exports = function(sequelize, DataTypes) {
return sequelize.define("tea", {
    id : DataTypes.INTEGER,
    quantity : DataTypes.INTEGER,
    status : DataTypes.STRING,
    created_at : DataTypes.DATE
});
};

每当我运行代码时,我都会收到错误

  

TypeError:Object [object Object]没有方法'save'

另外,设置很好,因为我可以运行登录代码 select * from where ...

我做错了什么?

3 个答案:

答案 0 :(得分:1)

一些有误导性的错误消息

在Sequelize中,您无法保存具有未定义属性的对象。

由于您的模型没有defaultValue,并且您没有定义idcreated_at,因此.build()方法未创建.save()方法它返回的对象。

有关文档的更多信息,请查看built instancesthis section on how to implement autoincrement上的文档。

答案 1 :(得分:0)

我知道这是一个老问题,但也许我可以帮助有问题的人。

Actualy问题是你正在调用一种没有这种方法的.save()方法。

这是一个常见的错误。您没有正确使用.build()方法。见下面的例子。

你在做什么:

Tea.build({quantity: quantity, status: "active"}).save();

你应该做的是:

var actualObject = Tea.build({quantity: quantity, status: "active"});
actualObject.save() //etc...

您看到一个错误,因为Tea实际上是模型的对象您刚刚构建的模型的实例。

希望有所帮助。

答案 2 :(得分:-1)

你得到的类型错误是说明对象Tea没有名为.save的方法。在您的代码中:

Tea.build({quantity: quantity, status: "active"}).save();

Tea是你的对象,而build正在调用一个名为.save的实例方法,你想在其中插入你的JSON数据。当您从特定的续集模型中调用类或实例方法时,您将收到找到的错误。

我建议您为续集模型使用模板来帮助解决这个常见错误。以下是我的建议:

<强> modelTemplate.js

module.exports = function(sequelize, DataTypes) {                                                    
    return sequelize.define('User', {                                                             
        col1: DataTypes.STRING,
        col2: DataTypes.STRING                                                                
    },{                                                                                              
        classMethods: {                                                                              
            doSomething: function(successcb, errcb, request) {}                                             
       },                                                                                           
       instanceMethods: {                                                                           
           saveSomething: function(data) {}                                              
       }                                                                                            
     });                                                                                              
   };

您的具体答案。我会用以下几行调整您对模型的调用:

 var data_json = {quantity: quantity, status: "active"};
 Tea.build().save(data_json);

<强> tea.js

module.exports = function(sequelize, DataTypes) {                                                    
    return sequelize.define('tea', {                                                             
         id : DataTypes.INTEGER,
         quantity : DataTypes.INTEGER,
         status : DataTypes.STRING                                                                 
    },{                                                                                              
        classMethods: {                                                                              
            doSomething: function(successcb, errcb, request) {}                                             
       },                                                                                           
       instanceMethods: {                                                                           
           save: function(data) {}                                              
               var new_instance = Tea.build({
                    quantity: data[0].quantity,
                    status: data[0].status
            });         
            //saving instance
            // you can also build, save and access the object with chaining:                                                             
            new_instance
            .save()
            .success(function(){}).error("instance error in .save() method"); 
       }                                                                                            
     });                                                                                              
   };

编辑:对模板中的逗号进行了更正。