DynamoDB:Dynamoose更新($ PUT默认行为)无法按预期工作?

问题描述 投票:0回答:1

我正在尝试实现PUT(更新)API端点,将元素的主键作为路径中的参数传递,将要更新的属性作为参数传递到正文中。但是没有按预期工作,而是更新现有元素的属性,而是在数据库中使用错误的属性创建新元素。

据我所知,从Dynamoose API documentationModel.update(key, update, options, callback)更新和表中的现有项目。例如,如果我们有一个Dog模型,其中age是其中一个属性,那么这个代码

Dog.update({ownerId: 4, name: 'Odie'}, {age: 1}, function (err) {
  if(err) { return console.log(err); }
  console.log('Just a puppy');
})

将使用ownerId:4更新名为'Odie'的狗的age

现在,我尝试为自己的API做类似的更新。我有一个名为InvoiceConfig的数据模型,其中主键对应于唯一的名称/ id(字符串)属性,并包含另一个名为providerVariants的属性(对象数组)

这是我在swagger中的API定义:

put:
  description: Updates the invoice config matching the id (providerName)
  operationId: updateInvoiceConfigByName
  consumes:
    - application/json
  produces:
    - application/json
  parameters:
    - name: id
      in: path
      required: true
      type: string
    - name: providerVariants
      description: array of JSON objects
      in: body
      required: true
      schema:
        $ref: "#/definitions/ProviderVariantsDataList"
  responses:
    "200":
      description: A confirmation message
      schema:
        $ref: "#/definitions/ResponseMessage"
    "500":
      description: Error message
      schema:
        $ref: "#/definitions/ErrorResponse"

这是在我的代码中实现dynamoose更新的函数:

updateInvoiceConfigByName: function(req, res) {
   var name = req.swagger.params.id.value;
   var providerVariants = req.body;
   console.log("UPDATE /invoice-config");

   InvoiceConfig.update({provideName: name}, providerVariants, function(err) {
      if (err) {
         console.log("Update InvoiceConfig error");
         throw err;
      }

      res.status(200).send({ 
         providerName: `${name}`,
         message: 'provider invoice cfg updated'
      });
   });
}

我在数据库中有一个对象:

{
    "providerName": "ID01",
    "providerVariants": [
      {
        "displayName": "My 1st Provider ",
        "phone": "915698471",
        "availableTemplates": [
          "default"
        ]
      }
    ]
}

并且我尝试通过以下参数从swagger-ui更新它:端点路径本身中的ID01和正文中的修改后的providerVariants数组:

[
   {
      "displayName": "My new name",
      "phone": "913333333",
      "availableTemplates": [
         "default"
      ]
   }
]

但正如我在开头所说,如果我检查我的表的内容,我看到带有providerName“ID01”的项目没有改变,并且创建了一个新项目:

{
    "providerName": {
       "S": "[object Object]"
    }
 }

我怀疑在这个新对象中,providerName(主键)填充了providerVariants数组,这是完全错误的。有关如何解决此问题的任何提示都是受欢迎的,我不知道如何继续更新。我的API中的其他端点(获取,删除,发布)工作正常,但我被更新/放置阻止

node.js amazon-dynamodb endpoint swagger-2.0 dynamoose
1个回答
1
投票

您的更新中存在拼写错误。

InvoiceConfig.update({provideName: name}, providerVariants, function(err) 

你错过了providerName中的'r':)

© www.soinside.com 2019 - 2024. All rights reserved.