我在 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();
}
}
)
我不确定如果客户端
正在重新连接过程中这是否有效。当一个名为 connectToServer
的函数不负责启动连接时,它也是相当具有误导性的。您可能需要考虑调整代码,以便在 connectToServer
内部调用 createClient
,这更像是使用 Mongo 的方式。
关于node.js - 无法连接到 MongoClient.connect 内的 Redis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46791935/