无法连接到MongoClient.connect中的Redis

时间:2017-10-17 13:56:04

标签: node.js mongodb express redis

我无法在MongoClient.connect中连接Redis。

虽然两者都是分开工作的,但在mongo s回调中,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 => {

})

1 个答案:

答案 0 :(得分:2)

我怀疑这是一个时间问题。当您致电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();
        }
    }
)

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