尝试使用Javascript中的典型http请求更新Contentful条目时,我碰到了一堵砖墙;我收到错误代码" VersionMismatch"根据文件,这意味着:
当您尝试更新现有资产时会发生此错误, 条目或内容类型,您没有指定当前版本 对象或指定过时的版本。
但是,我已使用' X-Contentful-Version'指定了当前版本的条目。标题参数根据文档,并使用了来自' entry.sys.revision'的动态属性值。作为参数值(以及硬编码当前版本,加上一堆不同的数字,但我总是收到相同的错误)。 This post报告了完全相同的问题,但似乎通过添加此标头参数解决了问题。
这是我当前的代码,也是使用Contentful API从我的Contentful空间中检索条目,但由于特定要求,我不得不使用普通的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);
});
答案 0 :(得分:1)
内容丰富的开发人员。
看起来您使用Contentful Delivery SDK获取内容,然后尝试使用该数据更新内容。那样不行。相反,我建议使用Contentful Management SDK来处理所有版本控制标题。
答案 1 :(得分:1)
我知道现在回答为时已晚,但我在执行此过程时也面临同样的问题。
所以我问了这个问题并得到了答案,我们如何在不使用 Contentful-management sdk 的情况下实现这一目标。我的意图不是压制这个sdk,但我们应该去执行没有它的操作。我正在尝试通过邮递员完成此操作,但遇到了问题。
所以我只是发布它并得到了答案,但明白为什么我无法更新内容的问题,因为两件事
URL(如果我们尝试更新内容,api.contentful.com 是正确的 URL)
access_token(如果我们使用 api.contentful.com 这意味着我们必须在 contentful 中生成我们的个人令牌(管理令牌),我们不能使用预览/交付令牌)
这些是我们在进行更新时需要考虑的重点。我发布了下面的链接,以后可能会对某人有所帮助。