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获得响应