node.js 从脚本调用函数来更新 UI

Posted

技术标签:

【中文标题】node.js 从脚本调用函数来更新 UI【英文标题】:node.js calling a function from script to update 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 应用程序的其余部分?谢谢。

【问题讨论】:

【参考方案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))。 听起来不错,您能否将相关代码添加到您的答案中?谢谢!

以上是关于node.js 从脚本调用函数来更新 UI的主要内容,如果未能解决你的问题,请参考以下文章

无法通过递归调用node.js中的函数从promises获得响应

从模块中调用 Node.js 模块函数

node.js 函数调用顺序,Spotify Web API

node.js怎么调用matlab中的函数

如何从 node.js 调用外部脚本/程序

node.js学习笔记之调用函数