2017-01-24 6 views
1

Ich bekomme undefiniert, wenn ich versuche, eine JSON-Eigenschaft von einer Redis-Funktion zu erhalten.Knoten js und Redis Undefinierte JSON-Eigenschaft

Wenn ich diese Konsole gibt, was zu der Annahme ist:

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

Console:

neue Nachricht in der Warteschlange hinzufügen { "message": "Eine neue Nachricht",“ Benutzer „:“ John Doe "} Kanal

Wenn ich eine Eigenschaft von Daten versuchen und ich undefined:

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

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

neue hinzufügen Nachricht in der Warteschlange nicht definiert Kanal

Ich habe auch seltsam die Dateneigenschaft wie dies ohne Glück

data.message 

Es ist, weil zu bekommen versucht, in mein clientseitiges Skript kann ich data.message verwenden und es funktioniert gut.

+1

u kann nur einmal versuchen JSON.parse (Daten) .message könnten nur Daten sein ist in stringify Format –

Antwort

2

Das Datenobjekt, das Sie erhalten, ist eine Zeichenfolge, kein Objekt. Um die Nachricht erhalten Sie JSON.parse(data).message

Mit Blick auf den Quellcode von redisClient tun sollen, können Sie feststellen, dass publish Methode und on('message') Ereignis String-Argumente verwenden. Bei der Verwendung von JSON.parse wird empfohlen, es in try/catch Block zu wickeln. Die Zeichenfolge ist möglicherweise nicht gültig und ein Fehler wird ausgegeben.

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); 
}) 

Mehr Informationen: