使用 angular 中的 --data-raw 发出简单的 http GET 请求 2+

Make a simple http GET request with --data-raw in angular 2+

我正在尝试使用 angular httpClient 进行以下操作 GET request,但到目前为止没有成功。任何人都可以帮忙。请求如下。

curl --location --request GET 'MY_URL_TO_SEND' 
--header 'Content-Type: application/json' 
--header 'Authorization: MY_TOKEN' 
--data-raw '{
    "_source": ["title"],
    "query": {
        "multi_match": {
                "query": "covid",
                "type": "best_fields",
                "fields": ["title.e_ngrams^4", "description.e_ngrams", "keywords.e_ngrams^2"],
                "fuzziness": 1
            }
    }
}' 

当我将命令粘贴到 terminal 中时该命令有效,并且 return 会得到以下结果。

{
    "took": 1,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 6,
            "relation": "eq"
        },
        "max_score": 1.0,
        "hits": [
            {
                "_index": "stats",
                "_type": "_doc",
                "_id": "daily-covid-19-deaths",
                "_score": 1.0,
                "_source": {
                    "title": "Daily Covid-19 Deaths"
                }
            }]
}
},

但是当我通过 angular 拨打电话时,而不是仅仅 return 将 title 作为 _source 它将 return 我所有其他人参数也表明调用未正常工作。

这是我目前为止尝试过的方法。

const httpParams: HttpParams = new HttpParams();
httpParams.set('_source', JSON.stringify(['title', 'slug']));
httpParams.set(
  'query',
  JSON.stringify({
    multi_match: {
      query: query,
      type: 'best_fields',
      fields: [
        'title.e_ngrams^4',
        'description.e_ngrams',
        'keywords.e_ngrams^2',
      ],
      fuzziness: 1,
    },
  })
);

this.http
  .get(environment.ES.searchAPI, {
    headers: this.httpHeaders,
    params: httpParams,
  })
  .subscribe((data: any) => {
    this.searchResults.next(this.parseResults(data));
  });

}

这 return 向我提供了结果,但传递的参数(例如 _source)不起作用。它只是 return 所有结果。

这是我的 angular 应用 httpClient return 上面代码的内容。

您可以改用 POST request

一个例子:

const body = JSON.stringify({
  _source: ['title', 'slug'],
  query:{
    multi_match: {
      query: query,
      type: 'best_fields',
      fields: [
        'title.e_ngrams^4',
        'description.e_ngrams',
        'keywords.e_ngrams^2',
      ],
      fuzziness: 1,
    }
  }
});

const httpHeaders = new HttpHeaders({
    'Content-Type' : 'application/json'
 });

this.httpClient.post(environment.ES.searchAPI, body, {
    headers:httpHeaders
  })    
  .subscribe((data: any) => {
    console.log(data);
  });

那么为什么在你的例子中你得到了所有的结果参数?

您的 GET request 被忽略 params: httpParams 因为 httpParamsnull

尝试将httpParams.set更改为httpParams = httpParams.set