我想显示搜索localhost:8400/api/v1/search
时得到的json。但我不知道怎么做。
我正在使用Elasticsearch Javascript客户端
我的路线:
'use-strict';
const express = require('express');
const elasticsearch = require('../models/elasticsearch.js');
const router = express.Router();
router.get('/api/v1/search', elasticsearch.search);
用于访问ElasticSearch DB
const es = require('elasticsearch');
let esClient = new es.Client({
host: 'localhost:9200',
log: 'info',
apiVersion: '5.3',
requestTimeout: 30000
})
let indexName = "randomindex";
const elasticsearch = {
search() {
return esClient.search({
index: indexName,
q: "test"
})
.then(() => {
console.log(JSON.stringify(body));
// here I want to return a Response with the Content of the body
})
.catch((error) => { console.trace(error.message); });
}
}
module.exports = elasticsearch;
答案 0 :(得分:1)
由于您添加elasticsearch.search
作为路由处理程序,因此将使用一些参数调用它。
将search
方法的签名更改为search(req, res)
然后只需致电res.send(JSON.stringify(body));
有关详细信息,请参阅https://expressjs.com/en/4x/api.html#res
答案 1 :(得分:1)
首先,快速路线的路线处理程序始终以(request, response, next)
作为参数。您可以使用响应对象将数据发送回客户端。
您可以编写自己的路由处理程序并在其中调用elasticsearch.search
,而不是将elasticsearch.search
方法作为路由处理程序传递,因此您仍然可以访问response
对象。例如:
function handleSearch(req, res, next) {
elasticsearch.search()
.then(function(data) {
res.json(data)
})
.catch(next)
}
并构建搜索功能,如下所示:
const elasticsearch = {
search() {
return esClient.search({
index: indexName,
q: "test"
})
.then((body) => body) // just return the body from this method
}
}
通过这种方式,您可以分离查询弹性和处理请求的问题。如果要将请求中的任何查询字符串参数传递给搜索功能,您还可以访问请求对象。