Node.js 无法连接到MongoClient.connect内的Redis
我无法连接MongoClient.connect中的Redis 尽管这两种方法都可以单独工作,但在mongo的回调函数中,Redis却无法连接 我的文件结构如下: mongoUtil.js:Node.js 无法连接到MongoClient.connect内的Redis,node.js,mongodb,express,redis,Node.js,Mongodb,Express,Redis,我无法连接MongoClient.connect中的Redis 尽管这两种方法都可以单独工作,但在mongo的回调函数中,Redis却无法连接 我的文件结构如下: mongoUtil.js: const chalk = require( 'chalk' ) const MongoClient = require( 'mongodb' ).MongoClient const appConfig = require( '../config/appConfig' ) let _db
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
的函数也会产生误导。您可能需要考虑调整代码,以便<代码> > CaleClient <代码>被称为“代码> Connect ToServer < /C> >,更像是如何使用Mongo。如果“Client=ReIIS.CeaCeClient())自动尝试连接到DB,您所说的应该是真的。我没有考虑这一点,但很有道理。我将测试你的解决方案。谢谢