无法连接到MongoClient.connect内的Redis

我在MongoClient.connect里连接Redis时遇到了麻烦。

虽然两者分开工作,但是在mongo的callback里,Redis并没有连接。

我的文件结构是这样的:

mongoUtil.js:

const chalk = require( 'chalk' ) const MongoClient = require( 'mongodb' ).MongoClient const appConfig = require( '../config/appConfig' ) let _db module.exports = { connectToServer: callback => { MongoClient.connect( appConfig.MONGO_URL, { promiseLibrary: Promise }, ( err, db ) => { _db = db; console.log( chalk.blue('Connected to MongoDB') ) callback( err ) } ) }, getDb: function() { return _db; } } 

redisUtil.js:

 const chalk = require( 'chalk' ) const redis = require('redis') let client = redis.createClient() module.exports = { connectToServer : callback => { client.on('connect', () => { console.log( chalk.red('Connected to Redis') ) callback() } ) }, getDb: function() { return client; } } 

server.js: 这不起作用

 const mongoUtil = require( './lib/mongoUtil' ) const redisUtil = require( './lib/redisUtil' ) mongoUtil.connectToServer( err => { redisUtil.connectToServer( () => { // some server code }) }) 

server.js: 这个工作

 const mongoUtil = require( './lib/mongoUtil' ) const redisUtil = require( './lib/redisUtil' ) redisUtil.connectToServer( () => { // some server code }) mongoUtil.connectToServer( err => { }) 

我怀疑这是一个计时问题。 当你调用redisUtil.connectToServer ,与Redis的连接已经build立,所以connect事件不会触发。 调用redis.createClient()将尝试立即连接,它不会等待您注册connect事件侦听器。

在我的头顶,这样的事情应该工作:

 connectToServer: callback => { if (client.connected) { console.log(chalk.red('Already connected to Redis')); callback(); } else { client.on('connect', () => { console.log(chalk.red('Connected to Redis')); callback(); } } ) 

如果client端正在重新连接,我不确定这是否会起作用。 当它不负责启动连接时,有一个名为connectToServer的函数也是很具误导性的。 您可能需要考虑调整代码,以便在connectToServer调用createClient ,更像是如何使用Mongo。