Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript DynamoDB(dynamoose)-类型错误:model.save不是函数_Javascript_Node.js_Amazon Dynamodb_Swagger_Swagger 2.0 - Fatal编程技术网

Javascript DynamoDB(dynamoose)-类型错误:model.save不是函数

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-

我正在使用dynamoose从node.js访问DynamoDB

我正在node.js中使用swagger实现一个crudapi,并且在更新(put)endoint时遇到了困难。它应该非常类似于POST端点,顺便说一句,它工作得很好

我已经定义了一个dynamoose模式,并基于该模式导出了一个dynamoose模型

然后,我实现了一个控制器模块,它导入模型并使用dynamooseapi模型函数处理数据库。这段代码显示了如何在控制器中实现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;
'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