我正在尝试实现PUT(更新)API端点,将元素的主键作为路径中的参数传递,并将要更新的属性作为参数传递到正文中。但是没有按预期工作,而不是更新现有元素的属性,是在数据库中使用错误的属性创建一个新元素。
据我所知,Dynamoose API documentation,Model.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中的其他端点(获取,删除,发布)工作正常,但我被更新/放置阻止
答案 0 :(得分:1)
您的更新中存在拼写错误。
InvoiceConfig.update({provideName: name}, providerVariants, function(err)
你错过了providerName中的'r':)