我是node.js的新手,所以如果我犯了一个明显的错误,请耐心等待。
要了解node.js,我正在尝试创建一个基本上的网络服务器: 1)每次击中根URL(localhost:8000 /)时更新页面并附加“hello world”。 2)用户可以转到另一个URL(localhost:8000 / getChatData),它将显示从触发的url(localhost:8000 /)构建的所有数据
我遇到的问题: 1)我在渲染页面上显示数据时遇到问题。我有一个定时器,应该调用get_data()第二个并使用存储附加输出的数据变量更新屏幕。具体来说这行在response.simpleText(200,data)之下;工作不正常。
文件
// Load the node-router library by creationix
var server = require('C:\\Personal\\ChatPrototype\\node\\node-router').getServer();
var data = null;
// Configure our HTTP server to respond with Hello World the root request
server.get("/", function (request, response) {
if(data != null)
{
data = data + "hello world\n";
}
else
{
data = "hellow world\n";
}
response.writeHead(200, {'Content-Type': 'text/plain'});
console.log(data);
response.simpleText(200, data);
response.end();
});
// Configure our HTTP server to respond with Hello World the root request
server.get("/getChatData", function (request, response) {
setInterval( function() { get_data(response); }, 1000 );
});
function get_data(response)
{
if(data != null)
{
response.writeHead(200, {'Content-Type': 'text/plain'});
response.simpleText(200, data);
console.log("data:" + data);
response.end();
}
else
{
console.log("no data");
}
}
// Listen on port 8080 on localhost
server.listen(8000, "localhost");
如果有更好的方法,请告诉我。目标是基本上让服务器调用url来更新变量,并让另一个html页面每秒动态地报告/显示更新的数据。
谢谢, d
答案 0 :(得分:0)
客户端服务器模型由客户端向服务器发送请求,而服务器返回发送响应。服务器无法向客户端未请求的客户端发送响应。客户端发起请求。因此,您无法让服务器在一定时间间隔内更改响应对象。
客户端不会对请求进行这些更改。这样的事情通常通过AJAX
来处理,来自服务器的初始响应将Javascript代码发送到客户端,该客户端在一定时间间隔内向服务器发起请求。
答案 1 :(得分:0)
setTimeout
接受没有参数的函数,这很明显,因为它将在稍后执行。您在该功能中需要的所有值都应该在时间点可用。在您的情况下,您尝试传递的response
对象是一个本地实例,其范围仅在server.get
的回调中(您设置setTimeout
)。
有几种方法可以解决此问题。您可以在get_data所属的外部作用域中保留响应实例的副本,也可以将get_data完全移入内部并删除setTimeout
。建议不要使用第一个解决方案,因为在1秒内多次调用getChatData
,最后一个副本将占主导地位。
但我的建议是将data
保留在数据库中,并在调用getChatData
后显示它。