Ошибка при каждом запуске datastore.runQuery: необходимо установить одно из полей Query.query и Query.gql_query

Я пытаюсь выполнить простой запрос к моему хранилищу данных Google Cloud с помощью google-api-nodejs-client. Я хочу запросить все объекты, соответствующие данному виду. Когда я запускаю этот запрос с помощью инструмента "Попробуйте сейчас", он работает нормально:

Request

POST https://www.googleapis.com/datastore/v1beta2/datasets/healthier-staging/runQuery?key={YOUR_API_KEY}

{
 "query": {
  "kinds": [
   {
    "name": "Subscriber"
   }
  ]
 }
}

Response

200 OK

{
 "batch": {
  "entityResultType": "FULL",
  "entityResults": [
   {
    "entity": {
     "key": {
      "partitionId": {
       "datasetId": "s~healthier-staging"
      },
      "path": [
       {
        "kind": "Subscriber",
        "name": "+1215XXXXXXX"
       }
      ]
     },
     "properties": {
...

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

Вот код, который я пытаюсь запустить в Node:

this.datastore.runQuery({
    datasetId: 'healthier-staging',
    query: {
        kinds: [{name: 'Subscriber'}]
    },
}, (function(err, result) {
    if (err) {
        console.error(err);
        return;
    }
}).bind(this));

Когда я пытаюсь выполнить тот же запрос с помощью модуля Node, я получаю эту ошибку:

{ [Error: one of fields Query.query and Query.gql_query must be set]
  code: 400,
  errors: 
   [ { domain: 'global',
       reason: 'INVALID_ARGUMENT',
       message: 'one of fields Query.query and Query.gql_query must be set' } ] }

Это не имеет смысла, так как я указал query поле. Я пробовал все виды вещей: удаление datasetId (выдает ошибку о необходимости datasetId), с помощью gql_query вместо этого (та же ошибка), инкапсулируя datasetId внутри транзакции и передачи его внутрь readOptions, так далее.

Это ошибка или я делаю что-то глупое?

Спасибо!

1 ответ

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

this.datastore.runQuery({
    datasetId: 'healthier-staging',
    resource: {
        query: {
            kinds: [{name: 'Subscriber'}]
        },
    },
}, (function(err, result) {
    if (err) {
        console.error(err);
        return;
    }
}).bind(this));