2016-03-24 2 views
1

Я пытаюсь отправить данные сервера на свой javascript-клиент, а затем вывести его в html (jade).Как отправить данные сервера Node.js клиенту Javascript?

Проблемы
1. My Js Client & Html переменные (ОткрытыйКлюч, имя, художник, картина, ID) являются "неопределенными"
2. Не ясно, на "попробовать" или "поймать" условными означают (может быть, это влияет на что-то)

Мои Исследования
https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest
Basic Ajax send/receive with node.js

Возможно, проблема связана с кодом сервера, Javscript-клиентом или Jade? Сервер

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 Client

Node.js

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

Джейд

#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

* Мой Js Client & Html "не определен" * - Что это значит? Вы говорите, что браузер просто отображает слово «undefined» в окне просмотра, когда вы вводите URL-адрес для HTML-документа в адресную строку? – Quentin

+0

* Я не знаю, что означают «try» или «catch» условные обозначения * - Они являются базовыми частями JavaScript. Вы попробовали [прочитать их] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/try...catch)? – Quentin

+0

@Quentin Я плохо обновил свой вопрос и спасибо за ресурс Js. –

ответ

0

Кажется, как будто я был наблюдательным за любовь во всех неправильных местах. Я не использовал этот код здесь, потому что я не думал, что это проблема, но после регистрации каждой функции, начиная с моего сервера, я понял, что ошибся. Это весь код части, первая часть - это ошибка.

Ответ/Простой урок: Я неправильно звонил по своим данным JSON. Всегда дважды проверяйте вложенность данных JSON.

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

}