我正在使用带有节点js的ejs框架。我可以用json格式获取所有索引名称。但我想要的只是指数的名称。我的代码如下所示 -
var client = require('../routes/Connection.js');
//display all indexes
module.exports.allIndexes = function (searchData, callback) {
client.indices.getAliases({
index: "_all",
level: "indices"
}, function (error, response, status) {
if (error) {
console.log("search error: " + error)
}
else {
//callback(response);---> this works
callback(response.hits.hits); // ---> this doesn't
}
});
}
如果我在回调中使用响应,我会得到以下输出:
{
"index-1": {
"aliases": {}
},
"index-2": {
"aliases": {}
},
"index-3": {
"aliases": {}
},
"index-4": {
"aliases": {}
}
}
当我在回调中使用response.hits.hits时,我得到错误:“无法读取未定义的属性'命中'”。我想只显示索引名称作为列表。仅供参考,在前端,我通过回复称为“结果”:
<h1>Index</h1>
<% for(var i=0; i < results.length; i++) { %>
<%= results[i].indices %>
<% } %>
没有显示出什么。
edit_1:
我导入模块如下:
在我的index.js
:
router.post('/indexes', function (req, res) {
elasticModule.allIndexes(req.body, function (data) {
res.render('elasticGui', { title: 'Elasticsearch GUI', results: data });
});
});
答案 0 :(得分:0)
查看您的回复结构
{
"index-1": {
"aliases": {}
},
"index-2": {
"aliases": {}
},
"index-3": {
"aliases": {}
},
"index-4": {
"aliases": {}
}
}
你没有看到hits
,是吗?因此response.hits
未定义且尝试引用hits
中的response.hits
时发生错误
您只需要像这样更改代码:
callback(Object.keys(response));
然后在您的视图中,您可以像这样迭代该数组:
<% results.forEach(function(index) { %>
<%= index %>
<% }); %>