在使用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/