我是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 ...
我做错了什么?
答案 0 :(得分:1)
在Sequelize中,您无法保存具有未定义属性的对象。
由于您的模型没有defaultValue
,并且您没有定义id
或created_at
,因此.build()
方法未创建.save()
方法它返回的对象。
有关文档的更多信息,请查看built instances和this 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");
}
});
};
编辑:对模板中的逗号进行了更正。