Google Firestore REST API - PullRequest
0 голосов
/ 30 марта 2020

Я пробовал метод "database.documents.patch" для создания нового документа в firestore (https://cloud.google.com/firestore/docs/reference/rest/v1/projects.databases.documents/patch)

const result = await firestore.projects.databases.documents.patch({
      name,
      auth,
      "fieldPaths": [
        {"messageUID": {
          "stringValue": messageUID
        }}
      ]
    })

Но я получил ошибку:

Error: Invalid JSON payload received. Unknown name "fields[messageUID][stringValue]": Cannot bind query parameter. Field 'fields[messageUID][stringValue]' could not be found in request message.
    at Gaxios._request (/srv/node_modules/gaxios/build/src/gaxios.js:85:23)
    at <anonymous>
    at process._tickDomainCallback (internal/process/next_tick.js:229:7)

Если я удалю строку с "stringValue": messageUID Будет создан ПУСТОЙ документ, что я делаю не так?

1 Ответ

0 голосов
/ 01 апреля 2020

Я думаю, вы связываете параметры запроса с телом запроса. Запрос на исправление требует указать как поля, которые вы хотите обновить, так и новые значения, которые вы будете хранить; первые передаются через параметры запроса, а вторые передаются в теле запроса. В приведенном вами примере вы смешиваете их.

Согласно документации о патче поля для обновления должны быть переданы с DocumentMask формат и значения для них в формате Документ . Вы можете взглянуть на эти связанные темы post1 , post2 и проверить, насколько они отличаются от вашего примера. Кроме того, вы можете использовать API-обозреватель для создания запросов и проверки их формы.

С другой стороны, я рекомендую не использовать необработанные запросы http rest для взаимодействия с Firestore, поскольку есть доступные клиентские библиотеки. для node.js, которые являются более надежными и позволяют вам не заботиться о деталях формы. В частности, методы create и set будут выполнять sh ту же задачу с более дружественным синтаксисом. Следующий пример адаптирован из node.js Reference :

let documentRef = firestore.collection('collection').doc();

documentRef.create({MessageUID: MessageUID}).then((res) => {
  console.log(`Document created at ${res.updateTime}`);
}).catch((err) => {
  console.log(`Failed to create document: ${err}`);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...