1

問題のコード:app.js

var redis = require('redis');
var redisClient = redis.createClient();
redisClient.on('error', function (err) {
  console.error('There was an Error ' + err);
});

// do stuff

redisClient.quit(function(err, res) {
  console.log('closing redis client.');
});

node_redisを使用してnode.jsアプリからRedisに接続しようとしています。ただし、Redisがダウンしている場合の対処方法がよくわかりません。

私はたくさんのを持っていますがclient.on('error', function(err) {})、それらは決して呼ばれていないようです。それを処理する適切な方法ですか?私はそれを間違って呼んでいますか?

redis / node / expressを使い始めたばかりなので、無知を許してください。

編集Vadimが私に気づかせてくれたように、私は実際client.on('error')にapp.jsでエラーを適切にキャッチしているようです。ただし、redisがダウンしているときにエラーをキャッチできないのは私のルートです。

4

2 に答える 2

0

endイベントはあなたが必要なものだと思います。

確立されたRedisサーバー接続が閉じられると、クライアントは終了します。

アップデート:

node.js> = 0.8.0を使用している場合は、ドメインモジュール機能を使用して非同期コードのエラーをキャッチできます。

Express/Connectアプリケーションにconnect-domainモジュールを使用できます。これにより、非同期コードでエラーをスローし、エラーハンドラーでキャッチできます。

于 2012-09-06T00:35:04.817 に答える
0

node_redisは非同期であるため、redisClient.on('error')他のコマンドをに送信し始める前に、コールバックが時間内に呼び出されていませんredisClient

この問題を修正する方法は、redisClient.on('connect')ハンドラーに「成功」​​コードを配置することでした。このコードは、redisClientが正常に接続した後にのみ呼び出されます。そして、私のフォールバックコードredisClient.on('error')

このgithubチェンジセットで、この問題をどのように修正したかについて詳しく知ることができます。

于 2012-09-06T04:24:20.790 に答える