在多个expressjs路由中共享elasticsearch客户端

时间:2015-01-03 18:14:19

标签: node.js express elasticsearch

我试图通过创建单独的文件将我巨大的expressjs路由重新组织成更小的块。但是,有些人需要连接到elasticsearch客户端来执行搜索:

路由/ index.js

var router = require('express').Router();
var models = require("../models");
var es = require('elasticsearch');
var es_client = new elasticsearch.Client({
        host: 'localhost:9200',
        log: 'trace'
});

router.get('/search', function(req, res) {
     // Do search in elasticsearch
     // es_client.search({......});
});

module.exports = router;

路由/ user.js的

var router = require('express').Router();
var models = require("../models");
var es = require('elasticsearch');
var es_client = new elasticsearch.Client({
        host: 'localhost:9200',
        log: 'trace'
});

router.get('/user/search', function(req, res) {
     // Do search in elasticsearch
     // es_client.search({......});
});

module.exports = router;

但是这没有意义,因为路由尝试连接到es客户端两次,由于使用中的连接错误而导致失败'

允许我的路由文件连接到elasticsearch进行搜索的好方法是什么?

1 个答案:

答案 0 :(得分:2)

制作一个弹性的.js文件,如下所示:

var elasticsearch = require('elasticsearch');
exports.es_client = new elasticsearch.Client({
                               host: 'localhost:9200',
                                log: 'trace'
});

并在index.js和user.js中使用它。

例如: - 在user.js中执行此操作:

var router = require('express').Router();
var models = require("../models");
var elastic = require("./elastic");

router.get('/user/search', function(req, res) {
     // Do search in elasticsearch
     // elastic.es_client.search({......});
});