无法连接到MongoClient.connect内的Redis
我在MongoClient.connect里连接Redis时遇到了麻烦。
虽然两者分开工作,但是在mongo的callback里,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的连接已经build立,所以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。