0

google-api-nodejs-client を使用して、Google Cloud データストアに対して簡単なクエリを実行しようとしています。特定の種類に一致するすべてのエンティティを照会したい。「今すぐ試す」ツールを使用してこのクエリを実行すると、正常に動作します。

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(needing に関するエラーが生成されますdatasetId)、代わりに使用gql_query(同じエラー)、 をトランザクション内にカプセル化し、datasetIdそれを 内に渡しますreadOptions

これはバグですか、それともばかげたことをしていますか?

ありがとう!

4

1 に答える 1

1

他の StackOverflow questionでこれについて言及しましたが、リクエストはリソースセクションに含める必要があります。

this.datastore.runQuery({
    datasetId: 'healthier-staging',
    resource: {
        query: {
            kinds: [{name: 'Subscriber'}]
        },
    },
}, (function(err, result) {
    if (err) {
        console.error(err);
        return;
    }
}).bind(this));
于 2015-06-29T14:49:07.120 に答える