【问题标题】:How to send Node.js server data to Javascript client? [closed]如何将 Node.js 服务器数据发送到 Javascript 客户端? [关闭]
【发布时间】:2016-07-12 13:48:02
【问题描述】:

我正在尝试将服务器数据发送到我的 javascript 客户端,然后以 html(jade) 格式输出。

问题
1。我的 Js 客户端和 Html 变量(publicKey、名称、艺术家、图片、id)是“未定义的”
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')

【问题讨论】:

  • 我的 Js 客户端和 Html 是“未定义的” — 这是什么意思?您是说当您在地址栏中输入 HTML 文档的 URL 时,浏览器只是在视口中呈现单词 undefined
  • 我不知道“try”或“catch”条件是什么意思——它们是 JavaScript 的基本部分。你试过reading up on them吗?
  • @Quentin 不好意思,我更新了我的问题,感谢 Js 资源。
  • 你使用的是平均堆栈吗?快递?
  • 尝试在浏览器中打开/user/:id,然后发布结果

标签: javascript ajax node.js express pug


【解决方案1】:

似乎我在所有错误的地方寻找爱情。我没有把这段代码放在这里,因为我认为这不是问题,但是在记录了从我的服务器开始的每个函数之后,我意识到我错了。这是整个部分代码,第一部分是错误所在。

答案/简单课程: 我没有正确调用我的 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); 
}

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多