2017-01-24 7 views
1

redis関数からJSONプロパティを取得しようとすると、未定義になります。ノードjsとRedis未定義のJSONプロパティ

私が仮定されているもの、このコンソール出力に使用する場合:

redisClient.on("message", function(channel, data) { 
console.log("new message add in queue "+ data + " channel"); 
socket.emit(channel, data); 
}); 

コンソール:

新しいメッセージがキュー{ "メッセージ" を追加: "!新しいメッセージを"、」ユーザー「:」ジョン・ドウは、 "}私がしようとすると、データからプロパティを取得するとき私が得る

チャンネル未定義:

redisClient.on("message", function(channel, data) { 

    console.log("new message add in queue "+ data['message'] + " channel"); 
    socket.emit(channel, data); 
}); 

新しいメッセージがキュー未定義のチャネルに

を追加し、私はまた、ので、それは奇妙だ運

data.message 

と、このようなデータプロパティを取得しようとしました私のクライアント側のスクリプト私はdata.messageを使用することができ、それは正常に動作します。

+1

uは一度だけデータだけかもしれませんJSON.parse(データ).messageを試すことができますが、文字列化形式であります –

答えて

2

取得するデータオブジェクトは文字列であり、オブジェクトではありません。メッセージを取得するには、あなたがpublish方法とon('message')イベントは文字列引数を使用していることに気付くことができredisClientのソースコードを見ることによってJSON.parse(data).message

を行う必要があります。 JSON.parseを使用する場合は、ブロックtry/catchにラッピングすることをお勧めします。文字列が有効でない可能性があり、エラーがスローされます。

redisClient.on("message", function(channel, data) { 
    try{ 
    data=JSON.parse(data) 
    } 
    catch(e){ 
    return console.log('data is not an JSON string',data) 
    } 
    console.log("new message add in queue "+ data['message'] + " channel"); 
    socket.emit(channel, data); 
}) 

情報より:

関連する問題