Ошибка при каждом запуске 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));