Обновление содержательной записи

Я попал в кирпичную стену, пытаясь обновить запись Contentful, используя типичный http-запрос в Javascript; Я получаю код ошибки "VersionMismatch", который, согласно документации, означает:

Эта ошибка возникает, когда вы пытаетесь обновить существующий ресурс, запись или тип контента, и вы не указали текущую версию объекта или не указали устаревшую версию.

Однако я указал текущую версию записи, используя параметр заголовка "X-Contentful-Version" в соответствии с документацией, и использовал значение динамического свойства из "entry.sys.revision" в качестве значения параметра (а также Жесткое кодирование текущей версии, плюс куча разных чисел, но я всегда получаю ту же ошибку). В этом посте сообщалось о точно такой же проблеме, но, казалось бы, она была решена путем добавления этого параметра заголовка.

Вот мой текущий код, который также использует 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);
});

2 ответа

Решение

Довольный разработчик здесь.

Похоже, вы получаете контент с помощью Contentful Delivery SDK, а затем пытаетесь использовать эти данные для обновления контента. Это не будет работать. Вместо этого я рекомендую использовать Contentful Management SDK, который позаботится обо всех заголовках версий для вас.

Я знаю, что уже слишком поздно отвечать здесь, но я также сталкиваюсь с той же проблемой при выполнении этого процесса.

Я задал этот вопрос и получил ответ, как этого добиться без использования Contentful-management sdk. Я не намерен подавлять этот SDK, но мы должны выполнить операцию без него. Я пытаюсь сделать это через почтальона, но столкнулся с проблемой.

Я просто публикую его и получил ответ, но понимаю проблему, почему я не могу обновить контент по двум причинам.

  1. URL-адрес (api.contentful.com - правильный URL-адрес, если мы пытаемся обновить контент)

  2. access_token (если мы используем api.contentful.com, что означает, что мы должны сгенерировать наш личный токен (токен управления) в содержательном, мы не можем использовать токены предварительного просмотра / доставки)

Это выделенный момент, который мы должны учитывать при обновлении. Я разместил ссылку ниже, возможно, это поможет кому-то в будущем.

Обновление записи Contentful с помощью почтальона

Другие вопросы по тегам