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

Sharing elasticsearch client in multiple expressjs routes

我正在尝试通过创建单独的文件将巨大的 expressjs 路由重组为更小的块。不过有几个需要连接elasticsearch客户端进行搜索:

routes/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;

routes/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 客户端两次,由于 'connection in use error'.

而失败

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

创建一个 elastic.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({......});
});