在使用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作为templateid)
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进行搜索查询,而我需要使用POST来存储搜索模板。

最佳答案

看起来您混合了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

关于vue.js - vue js axios,发送POST到elasticsearch,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/62585336/

10-13 07:49