Elasticsearch仅显示具有节点js的所有索引的名称

时间:2016-12-27 14:11:49

标签: javascript node.js elasticsearch ejs

我正在使用带有节点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 });
    });
});

1 个答案:

答案 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 %>
    <% }); %>