更新内容条目
Updating a Contentful entry
我在尝试使用 Javascript 中的典型 http 请求更新 Contentful 条目时遇到了麻烦;我收到错误代码 "VersionMismatch",根据文档,这意味着:
This error occurs when you're trying to update an existing asset,
entry or content type, and you didn't specify the current version of
the object or specify an outdated version.
但是,我已根据文档使用 'X-Contentful-Version' header 参数指定条目的当前版本,并使用 [=21= 中的动态 属性 值] 作为参数值(以及硬编码当前版本,加上一堆不同的数字,但我总是收到相同的错误)。 报告了完全相同的问题,但似乎已通过添加此 header 参数得到解决。
这是我当前的代码,它也使用 Contentful API 从我的 Contentful space 中检索条目,但我不得不使用普通 Javascript 来放置数据由于特定要求返回:
var client = contentful.createClient(
{
space: space_id,
accessToken: client_token
}
);
client.getEntry(entry_id).then((entry) => entry).then(function(entry) {
// update values of entry
entry.fields.title = "Testing";
// post data to contentful API
var request = new XMLHttpRequest();
request.open('PUT', 'https://api.contentful.com/spaces/' + space_id + '/entries/' + entry_id);
request.setRequestHeader('Authorization', 'Bearer my_access_token');
request.setRequestHeader('Content-Type', 'application/vnd.contentful.management.v1+json');
request.setRequestHeader('X-Contentful-Content-Type', entry.sys.contentType.sys.id);
// setting the 'X-Contentful-Version' header with current/soon to be old version
request.setRequestHeader('X-Contentful-Version', entry.sys.revision);
// convert entry object to JSON before sending
var body = JSON.stringify({fields: entry.fields});
request.send(body);
});
这里是心满意足的开发者。
您似乎是通过 Contentful Delivery SDK 获取内容,然后尝试使用该数据更新内容。这是行不通的。相反,我建议使用 Contentful Management SDK,它将为您处理所有版本控制 header。
我知道在这里回答已经太晚了,但我在做这个过程时也遇到了同样的问题。
所以我问了这个问题并得到了我们如何在不使用 Contentful-management sdk 的情况下实现这一目标的答案。我的意图不是压制这个 sdk,但我们应该在没有它的情况下执行操作。我正在尝试通过 postman 来完成,但遇到了问题。
所以我只是 post 它并得到了答案,但理解为什么我因为两件事无法更新内容的问题
URL(如果我们尝试更新内容,api.contentful.com 是正确的 url)
access_token(如果我们使用api.contentful.com这意味着我们必须在内容中生成我们的个人令牌(管理令牌),我们不能使用preview/delivery代币)
这些是我们在更新时需要考虑的重点。我 post编辑了下面的 link 可能对以后的人有帮助。
我在尝试使用 Javascript 中的典型 http 请求更新 Contentful 条目时遇到了麻烦;我收到错误代码 "VersionMismatch",根据文档,这意味着:
This error occurs when you're trying to update an existing asset, entry or content type, and you didn't specify the current version of the object or specify an outdated version.
但是,我已根据文档使用 'X-Contentful-Version' header 参数指定条目的当前版本,并使用 [=21= 中的动态 属性 值] 作为参数值(以及硬编码当前版本,加上一堆不同的数字,但我总是收到相同的错误)。
这是我当前的代码,它也使用 Contentful API 从我的 Contentful space 中检索条目,但我不得不使用普通 Javascript 来放置数据由于特定要求返回:
var client = contentful.createClient(
{
space: space_id,
accessToken: client_token
}
);
client.getEntry(entry_id).then((entry) => entry).then(function(entry) {
// update values of entry
entry.fields.title = "Testing";
// post data to contentful API
var request = new XMLHttpRequest();
request.open('PUT', 'https://api.contentful.com/spaces/' + space_id + '/entries/' + entry_id);
request.setRequestHeader('Authorization', 'Bearer my_access_token');
request.setRequestHeader('Content-Type', 'application/vnd.contentful.management.v1+json');
request.setRequestHeader('X-Contentful-Content-Type', entry.sys.contentType.sys.id);
// setting the 'X-Contentful-Version' header with current/soon to be old version
request.setRequestHeader('X-Contentful-Version', entry.sys.revision);
// convert entry object to JSON before sending
var body = JSON.stringify({fields: entry.fields});
request.send(body);
});
这里是心满意足的开发者。
您似乎是通过 Contentful Delivery SDK 获取内容,然后尝试使用该数据更新内容。这是行不通的。相反,我建议使用 Contentful Management SDK,它将为您处理所有版本控制 header。
我知道在这里回答已经太晚了,但我在做这个过程时也遇到了同样的问题。
所以我问了这个问题并得到了我们如何在不使用 Contentful-management sdk 的情况下实现这一目标的答案。我的意图不是压制这个 sdk,但我们应该在没有它的情况下执行操作。我正在尝试通过 postman 来完成,但遇到了问题。
所以我只是 post 它并得到了答案,但理解为什么我因为两件事无法更新内容的问题
URL(如果我们尝试更新内容,api.contentful.com 是正确的 url)
access_token(如果我们使用api.contentful.com这意味着我们必须在内容中生成我们的个人令牌(管理令牌),我们不能使用preview/delivery代币)
这些是我们在更新时需要考虑的重点。我 post编辑了下面的 link 可能对以后的人有帮助。