我使用dynamoose从node.js
访问DynamoDB我在node.js中实现了一个带有swagger并且UPDATE(put)端点有困难的CRUD API。它应该与POST端点非常相似,顺便说一句,它工作正常。
我已经定义了一个动态架构,并根据该架构导出了一个动态模型。
然后,我实现了一个控制器模块,该模块导入模型并使用dynamoose API模型函数来处理数据库。这段代码显示了如何在控制器中实现post方法:
'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;
如您所见,在控制器的post方法中,实例化了一个模型,根据POST请求正文中收到的参数设置属性,最后调用model.save方法来存储数据库中的模型。这很有效。
现在,我想向控制器添加一个更新方法,以更新存储在数据库中的某个项的属性。根据dynAmoose API文档,model.save & model.put"将项目放在DynamoDB表中并覆盖项目"。这意味着我可以将它用于我的更新方法,我传递整个对象(包括更新的属性),它将使用指定的主键覆盖对象。
据此,我在我的控制器中实现了更新方法:
'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;
但是当我尝试发送数据库中某个项目的PUT(UPDATE)请求时,我在控制器的更新方法中出现以下错误:
TypeError: myModel.save is not a function
at updateMyObject (/home/user/my-server/api/controllers/my-controller.js:15:17)
如您所见,MyController的updateMyObject方法几乎与postMyObject方法相同,只是update方法接收路径中的主键参数。
为什么在postMyObject中正常工作时,它会在updateMyObject方法中找不到model.save dynamoose API函数?
编辑: dynamoose模块导入../ models / my-model.js:
var dynamoose = require('dynamoose');