DynamoDB(dynamoose) - TypeError:model.save不是函数

时间:2017-06-26 11:20:53

标签: javascript node.js amazon-dynamodb swagger swagger-2.0

我使用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');

0 个答案:

没有答案