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

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

路线/ 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进行search的好方法?

       

网上收集的解决方案 "在多个expressjs路由中共享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({......}); });