Javascript DynamoDB(dynamoose)-类型错误:model.save不是函数
我正在使用dynamoose从node.js访问DynamoDB 我正在node.js中使用swagger实现一个crudapi,并且在更新(put)endoint时遇到了困难。它应该非常类似于POST端点,顺便说一句,它工作得很好 我已经定义了一个dynamoose模式,并基于该模式导出了一个dynamoose模型 然后,我实现了一个控制器模块,它导入模型并使用dynamooseapi模型函数处理数据库。这段代码显示了如何在控制器中实现post方法:Javascript DynamoDB(dynamoose)-类型错误:model.save不是函数,javascript,node.js,amazon-dynamodb,swagger,swagger-2.0,Javascript,Node.js,Amazon Dynamodb,Swagger,Swagger 2.0,我正在使用dynamoose从node.js访问DynamoDB 我正在node.js中使用swagger实现一个crudapi,并且在更新(put)endoint时遇到了困难。它应该非常类似于POST端点,顺便说一句,它工作得很好 我已经定义了一个dynamoose模式,并基于该模式导出了一个dynamoose模型 然后,我实现了一个控制器模块,它导入模型并使用dynamooseapi模型函数处理数据库。这段代码显示了如何在控制器中实现post方法: 'use strict'; // my-
'use strict';
// my-model.js exports the model
var MyModel = require('../models/my-model');
var MyController = {
postMyObject: function(req, res) {
var myModel = new MyModel();
myModel.attr1 = req.body.attr1; // primary key
myModel.attr2 = req.body.attr2;
myModel.save(function(err, myModelStored) {
if (err) {
console.log("Error storing InvoiceConfig");
res.status(500).send({message: `${err}`});
}
res.status(200).send(myModelStored);
});
}
}
module.exports = MyController;
'use strict';
// my-model.js exports the model
var MyModel = require('../models/my-model');
var MyController = {
updateMyObject: function(req, res) {
var myModel = new MyModel();
myModel.attr1 = req.swagger.params.id.value; // Primary key
myModel.attr2 = req.body.attr2;
// Overwrites the object in the DB
myModel.save(function(err, myModelUpdated) {
if (err) {
console.log("Error in update method");
res.status(500).send({message: `${err}`});
}
res.status(200).send(myModelUpdated);
});
},
postMyObject: function(req, res) {
var myModel = new MyModel();
myModel.attr1 = req.body.attr1; // primary key
myModel.attr2 = req.body.attr2;
myModel.save(function(err, myModelStored) {
if (err) {
console.log("Error in post method");
res.status(500).send({message: `${err}`});
}
res.status(200).send(myModelStored);
});
}
}
module.exports = MyController;
TypeError: myModel.save is not a function
at updateMyObject (/home/user/my-server/api/controllers/my-controller.js:15:17)
如您所见,在控制器的post方法中,实例化了一个模型,根据post请求主体中接收的参数设置了属性,最后调用该方法将模型存储在数据库中。这很有效
现在,我想向我的控制器添加一个更新方法,以更新存储在数据库中的一个项的属性。根据dynAmoose API文档,“将项放在DynamoDB表中并覆盖该项”。这意味着我可以将它用于我的更新方法,我传递整个对象(包括更新的属性),它将用指定的主键覆盖对象
据此,我在控制器中实现更新方法:
'use strict';
// my-model.js exports the model
var MyModel = require('../models/my-model');
var MyController = {
postMyObject: function(req, res) {
var myModel = new MyModel();
myModel.attr1 = req.body.attr1; // primary key
myModel.attr2 = req.body.attr2;
myModel.save(function(err, myModelStored) {
if (err) {
console.log("Error storing InvoiceConfig");
res.status(500).send({message: `${err}`});
}
res.status(200).send(myModelStored);
});
}
}
module.exports = MyController;
'use strict';
// my-model.js exports the model
var MyModel = require('../models/my-model');
var MyController = {
updateMyObject: function(req, res) {
var myModel = new MyModel();
myModel.attr1 = req.swagger.params.id.value; // Primary key
myModel.attr2 = req.body.attr2;
// Overwrites the object in the DB
myModel.save(function(err, myModelUpdated) {
if (err) {
console.log("Error in update method");
res.status(500).send({message: `${err}`});
}
res.status(200).send(myModelUpdated);
});
},
postMyObject: function(req, res) {
var myModel = new MyModel();
myModel.attr1 = req.body.attr1; // primary key
myModel.attr2 = req.body.attr2;
myModel.save(function(err, myModelStored) {
if (err) {
console.log("Error in post method");
res.status(500).send({message: `${err}`});
}
res.status(200).send(myModelStored);
});
}
}
module.exports = MyController;
TypeError: myModel.save is not a function
at updateMyObject (/home/user/my-server/api/controllers/my-controller.js:15:17)
但当我尝试发送数据库中某个项目的PUT(更新)请求时,控制器的更新方法中出现以下错误:
'use strict';
// my-model.js exports the model
var MyModel = require('../models/my-model');
var MyController = {
postMyObject: function(req, res) {
var myModel = new MyModel();
myModel.attr1 = req.body.attr1; // primary key
myModel.attr2 = req.body.attr2;
myModel.save(function(err, myModelStored) {
if (err) {
console.log("Error storing InvoiceConfig");
res.status(500).send({message: `${err}`});
}
res.status(200).send(myModelStored);
});
}
}
module.exports = MyController;
'use strict';
// my-model.js exports the model
var MyModel = require('../models/my-model');
var MyController = {
updateMyObject: function(req, res) {
var myModel = new MyModel();
myModel.attr1 = req.swagger.params.id.value; // Primary key
myModel.attr2 = req.body.attr2;
// Overwrites the object in the DB
myModel.save(function(err, myModelUpdated) {
if (err) {
console.log("Error in update method");
res.status(500).send({message: `${err}`});
}
res.status(200).send(myModelUpdated);
});
},
postMyObject: function(req, res) {
var myModel = new MyModel();
myModel.attr1 = req.body.attr1; // primary key
myModel.attr2 = req.body.attr2;
myModel.save(function(err, myModelStored) {
if (err) {
console.log("Error in post method");
res.status(500).send({message: `${err}`});
}
res.status(200).send(myModelStored);
});
}
}
module.exports = MyController;
TypeError: myModel.save is not a function
at updateMyObject (/home/user/my-server/api/controllers/my-controller.js:15:17)
如您所见,MyController的updateMyObject方法与postMyObject方法几乎相同,只是更新方法接收路径中的主键参数
为什么它抱怨model.save dynamoose API函数在updateMyObject方法中找不到,而它在postMyObject中工作正常
编辑:
dynamoose模块在../models/my-model.js中导入:
var dynamoose = require('dynamoose');
刚刚编辑了我的问题,说明可以从控制器(my-model.js本身需要)访问dynamoose模块。您使用的是Express还是Hapi REST api?@conceptQuest我使用的是Express