Узел Google Docs REST API Пакетное обновление недопустимого содержимого JSON / отсутствует documentId - PullRequest
0 голосов
/ 13 февраля 2019

При попытке выполнить пакетное обновление получено сообщение Invalid JSON error;и попытка строкового преобразования JSON приводит к ошибке «отсутствует documentId».Проблема не в OAuth, области токена или документа, так как все они правильные и функционируют (область действия была изменена с примера только для чтения на полную область документа).

Поскольку нет примера дляНовый API Google для пакетного обновления на узле У меня возникли серьезные проблемы с пакетным обновлением.После некоторого устранения неполадок с конструктором batchUpdate я сузил свою проблему до (потенциально) более крупной проблемы с конструктором URL-адреса API, или мой синтаксис неправильный (или оба). Или я пропускаю шаги для создания соответствующих объектов для вызова API(нет документации для этих задач)

Внутри обратного вызова после успешного получения документа согласно руководству по быстрому запуску узла google (в основном)

    let offset = startIndex + 12
    let updateObject = {
      documentId:doc_id,
      requests:
        [{
          insertTextRequest : 
            {
              text : 'John Doe',
              location : {
                index : offset
              }
            }
        }]
      } 
    docs.documents.batchUpdate(updateObject,function(e,r){
      console.log(e)
      console.log(r)
    }

Ответ API Google

'Invalid JSON payload received. Unknown name "requests[insertText][location][index]": Cannot bind query parameter. Field \'requests[insertText][location][index]\' could not be found in request message.\nInvalid JSON payload received. Unknown name "requests[insertText][text]": Cannot bind query parameter. Field \'requests[insertText][text]\' could not be found in request message.',
   domain: 'global',
   reason: 'badRequest' } ] }

Ответ после попытки JSON.stringify (updateObject) - усеченный

Error: Missing required parameters: documentId
at node_modules\googleapis-common\build\src\apirequest.js:114:19
at Generator.next (<anonymous>)

Моя лучшая догадкадля того, чтобы API правильно закодировал объект JSON для успешного выполнения запроса, должно произойти какое-то волшебство google voodoo.

  • Изменение массива одного запроса к объекту никак не повлияло на вышеуказанное.
  • Использование одинарных / двойных кавычек для имен параметров объекта запроса / строковой переменной не оказало влияния.
  • Идентификатор документа - строка, работает, но не sв примере кода.
  • Добавление поля documentId к запросу не имело эффекта.

1 Ответ

0 голосов
/ 13 февраля 2019

Как насчет этой модификации?

Точки модификации:

  • Измените свойство insertTextRequest на insertText.
  • О updateObject, пожалуйстаиспользуйте свойство resource для помещения тела запроса.

Модифицированный скрипт:

let offset = startIndex + 12;
let updateObject = {
    documentId: doc_id,
    resource: {
        requests: [{
            "insertText": {
                "text": "John Doe",
                "location": {
                    "index": offset,
                },
            },
        }],
    },
};
docs.documents.batchUpdate(updateObject, function(e, r) {
    if (e) {
        console.log(e);
    } else {
        console.log(r.data);
    }
});

Примечание:

  • Если ошибка состоянияINVALID_ARGUMENT и сообщение «Недопустимые запросы [0] .insertText: Index ### должен быть меньше конечного индекса указанного сегмента, ##.»происходит, например, попробуйте изменить index на 1.
  • Если возникла ошибка, попробуйте использовать последнюю версию googleapis, поскольку Docs API был добавлен недавно.
  • В этом измененном сценарии предполагается, что маркер доступа включает в себя область действия https://www.googleapis.com/auth/documents, а API Документов включен.

Ссылки:

Если я неправильно понял ваш вопрос, прошу прощения.

...