【问题标题】:How do I modify the page I'm serving in node.js如何修改我在 node.js 中提供的页面
【发布时间】:2015-07-27 12:45:29
【问题描述】:

好的,所以我有我的 server.js

var express     = require("express"),
    app         = express(),
    bodyParser  = require('body-parser');

app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());

app.use(express.static(__dirname + '/'));

app.post('/message', function(req, res) {
  var jsonData = req.body;
  if (jsonData.hasOwnProperty('phone1')) {
      console.log("Phone 1 is connected to", jsonData.phone1.connection,
                  "and has a downlink speed of", jsonData.phone1.dl, "Mbps");
  } else 
  if (jsonData.hasOwnProperty('phone2')) {
      console.log("Phone 2 is connected to", jsonData.phone2.connection,
                  "and has a downlink speed of", jsonData.phone2.dl, "Mbps");
  }
});

var port = 1337;
app.listen(port);
console.log("Running at Port " + port);

正如你所见,当服务器在 /message 上发布某些内容时,我想做一些事情。我可以 console.log 东西是的,但我想更改 此服务器正在服务的网页上的内容。 POST 请求来自另一台服务器。此服务器仅显示它们。

如何在不更新页面的情况下做到这一点?

我也在客户端使用 AngularJS,所以客户端获取 JSON 数据的任何方式都会很好。

我希望在我的 Highcharts 仪表和图表中显示数据,但对页面元素(例如 <p id="example">)进行简单的文本更新就可以很好地回答这个问题。

我知道我可以让 jquery 到节点,但我仍然缺少窗口元素来操作呈现的数据。 NW.js 可能完全符合我的要求,虽然我还没有尝试过,但我怀疑这个问题可能还有另一种解决方案。

【问题讨论】:

    标签: javascript angularjs node.js express highcharts


    【解决方案1】:

    如果您想将新内容推送到客户端(与客户端从服务器请求数据相反的流程),WebSockets 是一种选择(请参阅http://socket.io/ 了解公共库)。

    或者,您可以在客户端设置长轮询。这是使用 JavaScript 通过setInterval 或类似方法定期“轮询”服务器以获取信息。

    【讨论】:

    • 感谢您的评论,我了解了长轮询和 Web 套接字,并发现了有关服务器发送事件的信息,这正是我所寻找的,因为我只需要将数据从服务器发送到客户端。我不会接受你的回答作为这个问题的答案,因为它不是那么具体,但无论如何谢谢!
    【解决方案2】:

    由于我只需要将数据从服务器发送到客户端,我最终得到了服务器发送事件 (SSE),我的代码在服务器端如下所示:

    var mypage;
    
    app.get('/connect', function(req, res){
        res.writeHead(200, {
          'Connection': 'keep-alive',
          'Content-Type': 'text/event-stream',
          'Cache-Control': 'no-cache'
        });
        mypage = res;
    });
    
    app.post('/message', function(req, res) {
        if (mypage !== undefined) {
            mypage.write('data: '+ JSON.stringify( req.body ) +'\n\n');
        }
    });
    

    在客户端:

    $(function () {
        var server = new EventSource('/connect'),
            point1 = $("#gauge1").highcharts().series[0].points[0],
            point2 = $("#gauge2").highcharts().series[0].points[0];
        server.onmessage = function(e) {
            var jsonData = JSON.parse(e.data);
            if (jsonData.hasOwnProperty('phone1')) {
                point1.update(parseInt(jsonData.phone1.dl));
                if (jsonData.phone1.connection === "3G") {
                    /* extra functionality */
                } else {
                    /* extra functionality */
                }
            } else 
            if (jsonData.hasOwnProperty('phone2')) {
                point2.update(parseInt(jsonData.phone2.dl));
                if (jsonData.phone2.connection === "3G") {
                    /* extra functionality */
                } else {
                    /* extra functionality */
                }
            }
        };
    });
    

    我从my other question 获得了关于 SSE 数据格式的额外帮助

    Node Webkit 不能解决我的问题,因为它不在浏览器上运行。

    我仍然在接收许多帖子时遇到一些问题。我每 0.5 秒生成一条帖子消息,但我一直收到 5 条消息,然后 2 分钟什么也没收到,然后又收到 5 条消息。我不知道为什么会这样,但这不是这个问题的一部分,所以我会发布另一个关于这个问题的问题。

    【讨论】:

      猜你喜欢
      • 2018-11-10
      • 2012-02-09
      • 2013-02-13
      • 1970-01-01
      • 2016-09-14
      • 1970-01-01
      • 2020-11-12
      • 2023-03-08
      • 2012-06-24
      相关资源
      最近更新 更多