【问题标题】:node.js calling a function from script to update UInode.js 从脚本调用函数来更新 UI
【发布时间】:2013-09-12 05:44:53
【问题描述】:

这是我的网络服务器:

var net = require('net');

var server = net.createServer(function(socket) {
    socket.write('hello\n');
    socket.write('world\n');

    //RECEIVE PACKET ON SOCKET
    socket.on('data', function(data) {
        //socket.write(data);
        //console.log(data);
        testSocketData(data)
    });

});

server.listen(8000);

testSocketData(data) 方法位于文件update_ui.js 中并执行以下操作:

function testSocketData(test) {
    $('#p1').text(test)
}

其中#p1 指的是我的main.html 中的段落元素的ID。我知道我的套接字正在工作,但是我得到了:

ReferenceError: testSocketData is not defined.

如何简单地将从我的 node.js 服务器接收到的数据传递给我的 Web 应用程序的其余部分?谢谢。

【问题讨论】:

    标签: javascript jquery html node.js websocket


    【解决方案1】:

    您必须将该方法(以及 socket.on('data') )从服务器移动到客户端。当您通过套接字接收消息时,p1 元素也会更新其文本。

    在服务器上,你仍然需要一个 socket.on('data') 来接收来自客户端的消息。

    编辑: 这是一些代码,与我下面的评论略有不同。 在服务器上:

    function computeSomeResults(data) {
    // your logic here
    }
    socket.on('servermsg', function(data) {
      var result = computeSomeResults(data);
      socket.emit('clientmsg', result);
    });
    

    在客户端:

    function testSocketData(test) {
        $('#p1').text(test);
    }
    socket.on('clientmsg', function(data) {
      testSocketData(data);
      // emit something maybe?
    }
    

    最终,您可能想要向服务器发送一些东西:

    $('#p1').on('click', function(){
      socket.emit('servermsg', $(this).text());
    });
    

    【讨论】:

    • 我不明白 - 我是否应该将所有网络服务器代码移动到我的 update_ui.js 脚本,然后运行 ​​node update_ui.js 而不是 node webserver.js?还是把UI更新功能放在webserver.js脚本里?新的 node.js 用户在这里。
    • 您无权从服务器访问客户端的方法。你必须从服务器发送数据,你想要的文本。就这样!在客户端,您必须监听数据并应用 testSocketData 方法。这就是为什么我说你必须将它从服务器端移动到客户端,并提供一种机制来在你的服务器中监听和发送数据。
    • That's why I have said you have to move it from server to client side and provide a mechanism to listen and send data in your server. 那我该怎么做呢?
    • 看看socket.io。他们在服务器上有一个socket.on('my other event'),你必须有一个类似的监听器socket.on('data', function(data) { var result = /* perform some computation with the data received.*/ socket.emit('data', result) }); 现在,看看客户端,他们有一个socket.on('news')。您需要在客户端声明 testSocketData 和 socket.on('data', function(data){ testSocketData(data); }); Emit 和 on 必须匹配,如果你有 socket.emit('evt1', someData);在服务器端,您必须在客户端有 socket.on('evt1', function(data){})。
    • 听起来不错,您能否将相关代码添加到您的答案中?谢谢!
    猜你喜欢
    • 2017-11-02
    • 2012-02-01
    • 1970-01-01
    • 2018-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-25
    相关资源
    最近更新 更多