在使用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} }来存储搜索模板。
答案 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