我正试图使用Google-api-nodejs客户端对我的GoogleCloud数据存储运行一个简单的查询。我想查询与给定种类匹配的所有实体。当我使用"立即尝试"工具运行此查询时,它运行良好:
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
中传递,等等
这是虫子还是我在做傻事?
谢谢!
我在您的另一个StackOverflow问题中提到了这一点,但您的请求应该包含在资源部分:
this.datastore.runQuery({
datasetId: 'healthier-staging',
resource: {
query: {
kinds: [{name: 'Subscriber'}]
},
},
}, (function(err, result) {
if (err) {
console.error(err);
return;
}
}).bind(this));