vue js axios,发送POST到elasticsearch

时间:2020-06-25 22:36:30

标签: vue.js elasticsearch post axios

在使用Axios的Vue JS中,我想向Elasticsearch实例发出POST请求。更确切地说,我想存储搜索模板(https://www.elastic.co/guide/en/elasticsearch/reference/current/search-template.html#pre-registered-templates

POST _scripts/<templateid> {
    "script": {
        "lang": "mustache",
        "source": {
            "query": {
                "match": {
                    "title": "{{query_string}}"
                }
            }
        }
    } }

它可以与CURL一起使用,但是在尝试使用Axios时出现400错误。 我的代码如下(以test作为模板ID)

var dataBody = {
        "script": {
          "lang": "mustache",
          "source": {
            "query": { 
              "match": {
                "keyword": {
                  "query": "{{search_term}}"
                }
              }
            }
          }
        }
      };

      this.$http.post(
        "https://es-url/_scripts/test",
        {
          contentType: "application/json; charset=utf-8",
          crossDomain: true,
          dataType: "json",
          headers: {
            Authorization: "Basic " + btoa("elastic:password")
          },
          params: {
            source: dataBody,
            source_content_type: 'application/json'
          }
        }
      )
      .then(response => {
        console.log(response);
      })
      .catch(function (error) {
        console.log(error);
      });

错误:

Error: Request failed with status code 400
    at createError (createError.js?2d83:16)
    at settle (settle.js?467f:17)
    at XMLHttpRequest.handleLoad (xhr.js?b50d:61)

我正在使用相同的Axios参数来检索数据(从我的搜索查询中),效果很好,不同之处在于我可以使用GET进行搜索查询,而我需要使用{{1} }来存储搜索模板。

1 个答案:

答案 0 :(得分:1)

看起来您混合了Axios和jQuery的$.ajax

如果您实际上是在使用Axios,看起来像这样

this.$http.post('https://es-url/_scripts/test', dataBody, {
  auth: {
    username: 'elastic',
    password: 'password'
  }
})

请注意,要使其正常工作,您需要为Elasticsearch配置http.cors.enabled=true。参见https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-http.html