Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 无法连接到托管redis:就绪检查失败:不允许错误操作_Node.js_Redis - Fatal编程技术网

Node.js 无法连接到托管redis:就绪检查失败:不允许错误操作

Node.js 无法连接到托管redis:就绪检查失败:不允许错误操作,node.js,redis,Node.js,Redis,我正试图连接到Irishoch上的托管redis,我通过Nodejitsu配置了它 我认为是我的server.js的相关部分: var redisUrl = require('url').parse(config.REDIS_CONNECTION_URI); var client = require('redis').createClient(redisUrl.port, redisUrl.hostname); 我还没有在我的server.js中与客户机进行任何交互,这就是为什么我认为它抛出“

我正试图连接到Irishoch上的托管redis,我通过Nodejitsu配置了它

我认为是我的server.js的相关部分:

var redisUrl = require('url').parse(config.REDIS_CONNECTION_URI);
var client = require('redis').createClient(redisUrl.port, redisUrl.hostname);
我还没有在我的server.js中与客户机进行任何交互,这就是为什么我认为它抛出“不允许的操作”很奇怪的原因,因为基本上我唯一做的操作就是连接。我没有redis.conf文件,我相信我不应该需要一个,因为我自己没有主持redis实例

日志:

Express服务器在端口3000上侦听
/Users/soroushhakami/dev/projects/projectx/node_modules/redis/index.js:504
抛出错误;
^
错误:就绪检查失败:不允许错误操作
在RedisClient.on_info_cmd(/Users/soroushhakami/dev/projects/projectx/node_modules/redis/index.js:317:35)
在Command.RedisClient.ready_check.send_anyly[作为回调](/Users/soroushhakami/dev/projects/projectx/node_modules/redis/index.js:365:14)
在RedisClient.return_错误(/Users/soroushhakami/dev/projects/projectx/node_modules/redis/index.js:500:25)
位于ReplyParser.RedisClient.init_parser(/Users/soroushhakami/dev/projects/projectx/node_modules/redis/index.js:260:14)
在ReplyParser.EventEmitter.emit(events.js:96:17)
在ReplyParser.send_错误(/Users/soroushhakami/dev/projects/projectx/node_modules/redis/lib/parser/javascript.js:293:10)
在ReplyParser.execute(/Users/soroushhakami/dev/projects/projectx/node_modules/redis/lib/parser/javascript.js:176:22)
在RedisClient.on_data(/Users/soroushhakami/dev/projects/projectx/node_modules/redis/index.js:476:27)
在插座上。(/Users/soroushhakami/dev/projects/projectx/node_modules/redis/index.js:79:14)
位于Socket.EventEmitter.emit(events.js:96:17)

有什么问题吗?

您需要在创建客户端后直接调用
client.auth()


令人困惑的是,当您不在
客户机上调用
.auth()
,但也不调用其他任何东西时,您将得到一个失败的就绪检查错误。

在CLI测试时,我通常会出现该错误

我想问题在于,对auth的调用应该在ready事件发出之前进行(如前所述)。当您使用CLI进行测试时,只要在
var client=redis.createClient(端口、主机)的末尾按enter键,客户端就会开始连接行,并可能在您有机会发送AUTH命令之前发送某种空闲命令,这会触发不允许的
ERR操作
error

tl;dr

CLI测试时,使用以下代码创建redis客户端:

var redis = require('redis');
function createClient(port, host, pass) {
    var client = redis.createClient(port, host);
    client.auth(pass);
    return client;
}

var r = createClient(<MYPORT>, <MYHOST>, <MYPASS>);
var redis=require('redis');
函数createClient(端口、主机、过程){
var client=redis.createClient(端口、主机);
client.auth(pass);
返回客户;
}
var r=createClient(,);

您确定Redis服务器不需要身份验证吗?确实需要。但是在创建客户端之后,我打算使用client.auth(password)进行身份验证。此外,错误表明就绪检查失败,而不是身份验证失败。但也许错误信息没有传达出实际问题?说明:“对client.auth()的调用不应在就绪处理程序中。如果您这样做是错误的,客户端将发出类似以下错误的错误:就绪检查失败:错误操作不允许',这就是您看到的。我看到了。但在这段代码中,我没有调用client.auth,但它失败了。我使用了我们现有的远程redis,但忘记了它在redis.conf中设置了requirepass
var client = require('redis').createClient(redisUrl.port, redisUrl.hostname);
client.auth(PASSWORD);
var redis = require('redis');
function createClient(port, host, pass) {
    var client = redis.createClient(port, host);
    client.auth(pass);
    return client;
}

var r = createClient(<MYPORT>, <MYHOST>, <MYPASS>);