我试图用Contentful的内容管理API做以下事情:
- 获取条目(entry1)
- 使用entry1中字段的数据查找另一个条目(entry2)
- 用entry2的数据更新entry1
我的代码是这样的:
client.getSpace("xxxxxxxx").then(function(space){
space.getEntries({
"content_type": "xxxxxxxx",
"sys.id": "2KEZYJOgDSeQMCQIE0Oo88",
"limit": 1
}).then(function(places){
//search for relevant category entry
space.getEntries({
"content_type": contentType.category,
"sys.id": places[0].fields.category["en-GB"],
"limit": 1
}).then(function(category){
//update place object
places[0].fields.categoryNew = {
"en-GB": [
{ sys: { type: "Link", linkType: "Entry", id: category[0].sys.id } }
]
};
//update place
request({
method: 'PUT',
url: 'https://api.contentful.com/spaces/xxxxxxxx/entries/' + places[0].sys.id,
headers: {
'Authorization': 'Bearer xxxxxxxx',
'Content-Type': 'application/vnd.contentful.management.v1+json',
'X-Contentful-Content-Type': 'xxxxxxxx'
},
body: JSON.stringify({fields:places[0].fields})
}, function (error, response, body) {
console.log(body);
});
});
});
});
步骤1和2工作正常,但最后一步,更新原始条目,一直返回以下错误:
Response: {
"sys": {
"type": "Error",
"id": "VersionMismatch"
},
"requestId": "content-api:2PSSF6RtpSs2YyaaisK2wc"
}
我如何阻止这种情况的发生?我已经尝试了我能想到的一切,包括手动更新sys.version
号码,但在更新时,它似乎忽略了我提供的任何sys
数据。
参考https://www.contentful.com/developers/docs/references/content-management-api/#/introduction/updating-and-version-locking
您需要将版本作为名为" x - content - version "的头参数传递。
正如所接受的答案中所提到的,您缺少X-Contentful-Version
标头,但这可能不是问题的原因。
Contentful想要"当前版本"(根据文档),它不一定与已发布的版本相同。它要检查您是否在更新旧版本的内容。最新(即"当前")版本和已发布版本都出现在对条目的GET响应中。确保您在X-Contentful-Version
头中使用正确的一个,否则您将得到此错误。如果您使用官方sdk之一,它应该自动为您处理此问题。但是如果你正在使用例如Golang或curl,你必须像上面那样自己做。
它也可能是一个PATCH请求,你需要在这里而不是PUT,但这是另一回事。