我无法在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 => {
})
答案 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的方式。