如何将 Node.js 服务器数据发送到 Javascript 客户端?
How to send Node.js server data to Javascript client?
我正在尝试将服务器数据发送到我的 javascript 客户端,然后将其输出到 html(jade)。
问题
1。我的 Js 客户端和 Html 变量(publicKey、名称、艺术家、图片、id)是 "undefined"
2. 不清楚 "try" 或 "catch" 条件句的意思(也许这会影响某些事情)
我的研究
https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest
Basic Ajax send/receive with node.js
问题可能出在我的服务器代码、Javscript 客户端或 Jade 上吗?
Node.js 服务器
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客户端
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')
看来我在所有错误的地方寻找爱情。我没有把这段代码放在这里,因为我认为这不是问题所在,但是在记录了从我的服务器开始的每个函数后,我意识到我错了。这是完整的部分代码,第一部分是错误所在。
Answer/Simple课时:
我没有正确调用我的 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);
}
}
我正在尝试将服务器数据发送到我的 javascript 客户端,然后将其输出到 html(jade)。
问题
1。我的 Js 客户端和 Html 变量(publicKey、名称、艺术家、图片、id)是 "undefined"
2. 不清楚 "try" 或 "catch" 条件句的意思(也许这会影响某些事情)
我的研究
https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest
Basic Ajax send/receive with node.js
问题可能出在我的服务器代码、Javscript 客户端或 Jade 上吗?
Node.js 服务器
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客户端
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')
看来我在所有错误的地方寻找爱情。我没有把这段代码放在这里,因为我认为这不是问题所在,但是在记录了从我的服务器开始的每个函数后,我意识到我错了。这是完整的部分代码,第一部分是错误所在。
Answer/Simple课时: 我没有正确调用我的 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);
}
}