Node.js 无法连接到MongoClient.connect内的Redis

Node.js 无法连接到MongoClient.connect内的Redis,node.js,mongodb,express,redis,Node.js,Mongodb,Express,Redis,我无法连接MongoClient.connect中的Redis 尽管这两种方法都可以单独工作,但在mongo的回调函数中,Redis却无法连接 我的文件结构如下: mongoUtil.js: const chalk = require( 'chalk' ) const MongoClient = require( 'mongodb' ).MongoClient const appConfig = require( '../config/appConfig' ) let _db

我无法连接MongoClient.connect中的Redis

尽管这两种方法都可以单独工作,但在mongo的回调函数中,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的连接将已经建立,因此
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();
        }
    }
)

如果
客户端
正在重新连接,我不确定这是否有效。当函数不负责启动连接时,使用名为
connectToServer
的函数也会产生误导。您可能需要考虑调整代码,以便<代码> > CaleClient <代码>被称为“代码> Connect ToServer < /C> >,更像是如何使用Mongo。

如果“Client=ReIIS.CeaCeClient())自动尝试连接到DB,您所说的应该是真的。我没有考虑这一点,但很有道理。我将测试你的解决方案。谢谢