2016-03-24 12 views
1

Sunucu verilerini javascript istemcime göndermeye çalışıyorum ve sonra html (yeşim) olarak çıktıyorum.Javascript istemcisine Node.js sunucu verileri nasıl gönderilir?

Sorunları
1. My Js Müşteri & Html değişkenleri (publickey, isim, sanatçı, resim, id) ("dene" veya "yakalama" koşul anlamına üzerinde
2. net değil "tanımsız" dir belki bu etkiliyor şey)

Araştırmam
https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest
Basic Ajax send/receive with node.js

Sorun, sunucu kodumda, Javscript istemcisinde mi, yoksa Jade'le mi ilgili? Ben bakmak sanki

node.js sunucusu

app.get('/user/:id', function (req, res) { 
    if (!req.user) 
    res.send(err); 
    if(req.user) { 
    try { 
     var id = req.params.id; 
     var dbUser = req.user; 

     res.send({ 
     'publicKey': dbUser.publicKey, 
     'name': dbUser.name, 
     'artist': dbUser.artist, 
     'picture': dbUser.picture, 
     'id': dbUser.id 
     }); 

    } catch (e) { 
     res.send({'status': 404}); 
    } 
    } else { 
    res.send({'status': 403}); 
    } 

}); 

Js Müşteri

var keysCache = {}; 
    var xhr = new XMLHttpRequest(); 
    xhr.open('GET', '/user/' + message.userid, true); 
    xhr.onreadystatechange = function() { 
    if (xhr.readyState === 4) { 
     var res = JSON.parse(xhr.responseText); 

     keysCache[message.userid] = { 
     'publicKey': res.publicKey, 
     'name': res.name, 
     'artist': res.artist, 
     'picture': res.picture, 
     'id': res.id 
     } 
     console.log(res.name); 
     displayOutput(message); 
    } 
    }; 
    xhr.send(null); 

Jade

#chat 
    (...) 
    script. 
    window.user = {id:"#{user.id}", name: "#{user.artist}", picture: "#{user.picture}", gtoken: "#{user.gtoken}", eccKey: "#{user.eccKey}"}; 
    script(src='/javascripts/client.js') 
+0

* Benim Js Müşteri & Html * "tanımsız" - bu ne anlama geliyor? HTML belgesinin URL'sini adres çubuğuna yazdığınızda, tarayıcının sadece viewport'ta 'undefined' kelimesini oluşturduğunu mu söylüyorsunuz? – Quentin

+0

* "Deneme" veya "yakalama" koşullarının ne anlama geldiğini bilmiyorum * - Bunlar, JavaScript'in temel parçalarıdır. Okumaya çalıştın mı? (Https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/try...catch)? – Quentin

+0

@Quentin Bozuk Benim sorumu güncelledim ve Js kaynağı için teşekkürler. –

cevap

0

Öyle görünüyor tüm yanlış yerlerde aşk için. Bu kodu buraya koyamadım çünkü sorun olduğunu düşünmedim ama sunucumdan başlayarak her işlevi kaydettikten sonra yanıldığımı fark ettim. Bu tüm parça kodudur, ilk kısım hatanın nerede olduğudır.

Cevap/Basit Ders: Doğru benim JSON veri aramıyordu. Her zaman JSON veri yuvalamasını iki kez kontrol edin.

function displayOutput(message) { 
    if(!message) return; 
    if(typeof(message.text) === 'undefined') return; 

var html = ''; 

if ('userid' in message && message.userid in keysCache) { 

    var signature = message.signature; 

    delete message.signature; 

    var result = ecc.verify(keysCache[message.userid].publicKey, signature, JSON.stringify(message)); 

    if(result) { 
    html = '<p><img src="'+ keysCache[message.userid].picture +'" class="avatar"><strong>' + keysCache[message.userid].artist + '</strong><br><span>' + message.text + '</span></p>'; 
    } else { 
    html = '<p><img src="images/troll.png" class="avatar"><strong></strong><br><em>A troll tried to spoof '+ keysCache[message.userid].artist +' (but failed).</em></p>'; 
    } 

    output.innerHTML = html + output.innerHTML; 

} else { 
    var xhr = new XMLHttpRequest(); 
    xhr.open('GET', '/user/' + message.userid, true); 
    xhr.onreadystatechange = function() { 
    if (xhr.readyState === 4) { 
     var res = JSON.parse(xhr.responseText); 

     keysCache[message.userid] = { 
     'publicKey': res.publicKey, 
     'name': res.name, 
     'artist': res.artist, 
     'picture': res.picture, 
     'id': res.id 
     } 
     console.log(name); 
     displayOutput(message); 
    } 
    }; 
    xhr.send(null); 
} 

}

İlgili konular