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
,而且您没有定义id
或created_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"); } }); };
编辑:对模板中的逗号进行了更正。