我正在使用带有https://www.npmjs.com/package/elasticsearch包
的NodeJS用例如下:当在页面上单击链接时,我将向NodeJS服务器发出请求,然后NodeJS服务器将使用ES节点包从ES Server获取数据并将数据发送回客户端
问题是,当在快速会话中发出两个请求(在短时间内点击两个链接)时,第一个请求的响应然后第二个请求的响应到达客户端。 UI取决于此响应,我想直接显示第二个请求的响应。
所以,问题是,有没有办法在开始新服务器之前取消之前向ES服务器发出的请求?
代码: ES客户:
var elasticsearch = require('elasticsearch');
var client = new elasticsearch.Client({
host: 'HostName',
log: 'trace'
});
路线:
app.get('/data/:reportName', dataController.getReportData);
DataController类:
function getReportData(req, res) {
query = getQueryForReport(report)
client.search(query)
.then(function(response) {
res.json(parseResponse(response)
})
}
因此,使用不同的reportNames连续两次调用相同的API /data/reportName
。我想只发送第二个报告数据并取消我们的第一个请求。
答案 0 :(得分:0)
如果您只关心用户体验,而不是强调您的ES,而不是aborting
ajax请求就是您想要的。
由于您没有发布客户端代码,我将为您提供一个通用示例:
var xhr = $.ajax({
type: "GET",
url: "searching_route",
data: "name=John&location=Boston",
success: function(msg){
alert( "Data Saved: " + msg );
}
});
//kill the request
xhr.abort()
请记住,中止请求可能无法阻止elasticsearch
查询被处理,但会阻止客户端接收数据。