4

我正在尝试使用 Content Management API for Contentful 执行以下操作:

  1. 获取一个条目(entry1)
  2. 使用 entry1 中某个字段的数据查找另一个条目 (entry2)
  3. 使用 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我提供的任何数据。

4

1 回答 1

3

请参阅http://docs.contentfulcma.apiary.io/#introduction/resource-ids和标题为“更新和版本锁定”的部分

您需要将版本作为名为“X-Contentful-Version”的标头参数与 PUT 请求一起传递。

于 2015-10-13T17:03:26.923 回答