[英]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.