簡體   English   中英

無法連接到 MongoClient.connect 內的 Redis

[英]Can not connect to Redis inside MongoClient.connect

我在 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();
        }
    }
)

如果client端正在重新連接,我不確定這是否有效。 當它不負責啟動連接時,有一個名為connectToServer的函數也非常具有誤導性。 您可能需要考慮調整您的代碼,以便在connectToServer調用createClient ,更像是使用 Mongo 的方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM