如何将Node.js服务器数据发送到Javascript客户端
How to send Node.js server data to Javascript client?
我正在尝试将服务器数据发送到我的javascript客户端,然后用html(jade)输出。
问题
1.我的Js客户&Html变量(publicKey、name、artist、picture、id)"未定义"
2.不清楚"try"或"catch"条件句的意思(也许这影响了什么)
我的研究
https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest
使用node.js的基本Ajax发送/接收
问题可能出现在我的服务器代码、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')
我似乎在错误的地方寻找爱情。我没有把这段代码放在这里,因为我不认为这是问题所在,但在记录了从服务器开始的每个函数后,我意识到我错了。这是整个部分的代码,第一部分是错误所在。
答案/简单课程:我没有正确调用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客户端对象模型检索Sharepoint 2010列表项权限
- 从javascript客户端验证REST服务
- 无法使用javascript客户端访问远程web服务
- 在javascript客户端和java服务器之间共享Google Analytics ClientID
- 应用程序引擎终结点:用于OAuth2授权的Javascript客户端库需要多个弹出窗口
- 使用Javascript客户端进行REST基本身份验证的安全缺陷是什么(如果有的话)
- 如何从Python服务器获取到Javascript客户端
- 在Javascript客户端中隐藏基本的身份验证凭据
- Postback与Javascript客户端计算
- 有没有办法使用Google's Javascript客户端登录时没有弹出窗口
- javascript客户端ORM的框架
- 如何使用javascript客户端设置Python服务器端
- Firebase服务器发送事件-如何构建Java/JavaScript客户端
- Javascript客户端从ASP.NET MVC后端延迟加载模型
- 当将从javascript客户端调用javaapi时,在javaapi中使用2d数组
- javascript客户端中的服务器端数据绑定
- 在javascript(客户端)中跨多个窗口共享数据
- Javascript客户端提供哪些数据库,不包括特定于浏览器的数据库
- 如何将Node.js服务器数据发送到Javascript客户端
- javascript客户端安全性