奇妙なredisの動作があります:
const redis = require('redis');
const { REDIS_URL: redisUrl, REDIS_PASSWORD: redisPassword } = process.env;
const client = redis.createClient(redisUrl, {
no_ready_check: true,
auth_pass: redisPassword
});
client.on('connect', () => {
redisPassword && client.auth(redisPassword);
});
client.on('error', err => {
global.console.log(err.message)
});
しかし、私はいつも次のエラーを受け取ります:
投げる; //未処理の「エラー」イベント
ReplyError:準備完了チェックに失敗しました:NOAUTH認証が必要です。
なぜ未処理なのですか? I set onerrorハンドラー
準備完了チェックが失敗したのはなぜですか? I 無効オプションでそれ
コードがこのエラーをスローする理由がわかりません。しかし、私はこのコードをローカルマシンで試しましたが、うまく機能します。
const redis = require('redis');
const redisPassword = "password" ;
const client = redis.createClient({
Host : '127.0.0.1',
no_ready_check: true,
auth_pass: redisPassword,
});
client.on('connect', () => {
global.console.log("connected");
});
client.on('error', err => {
global.console.log(err.message)
});
client.set("foo", 'bar');
client.get("foo", function (err, reply) {
global.console.log(reply.toString())
})
そして、ノードclient.jsを実行すると、次のように出力されます。
接続済み
バー
NOAUTH必要な認証は、redisプロセスコマンドが原因で発生します。クライアントが認証されていないことが検出されたため、メッセージが表示されました。
CreateClientに指定したredisUrlに問題がある可能性があります。デバッグするか、コードの試行方法を変更してください。うまくいけば、あなたはそれを修正することができます。
そしてもう1つ、client.auth(redisPassword)は必要ありません。これは、auth_passまたはpasswordオプションを設定すると、redisクライアントがコマンドの前にauthコマンドをサーバーに自動的に送信するためです。