web-dev-qa-db-ja.com

Node-Redis:準備完了チェックに失敗しました-NOAUTH認証が必要です

奇妙な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コマンドをサーバーに自動的に送信するためです。

9
GuangshengZuo