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

我是新的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'

还要提到,设置是好的,因为我可以运行login代码select*从哪里…

请帮助我了解我做错了什么

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

实际上,问题在于你正在调用一个没有这种方法的.save()方法。

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

你在做什么:

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

你应该做的是这样的:

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

你看到一个错误,因为Tea实际上是模型的一个对象,而不是你刚刚build立的模型的一个实例。

希望有所帮助。

有点误导性的错误信息

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

由于您的模型没有defaultValue ,而且您没有定义idcreated_at ,所以.build()方法不会在它返回的对象上创build一个.save()方法。

有关文档的更多信息,请查看有关构build实例的文档以及有关如何实现autoincrement此部分 。

你得到的types错误是陈述的对象茶有没有方法称为.save。 在你的代码中:

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

茶是你的对象和构build调用一个实例方法称为.save你想插入你的JSON数据。 当你从一个特定的sequelize模型中调用一个类或实例方法时,你会得到你发现的错误。

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

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

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