Node.js并理解响应如何工作

时间:2013-09-24 02:28:45

标签: node.js

我是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

2 个答案:

答案 0 :(得分:0)

客户端服务器模型由客户端向服务器发送请求,而服务器返回发送响应。服务器无法向客户端未请求的客户端发送响应。客户端发起请求。因此,您无法让服务器在一定时间间隔内更改响应对象。

客户端不会对请求进行这些更改。这样的事情通常通过AJAX来处理,来自服务器的初始响应将Javascript代码发送到客户端,该客户端在一定时间间隔内向服务器发起请求。

答案 1 :(得分:0)

setTimeout接受没有参数的函数,这很明显,因为它将在稍后执行。您在该功能中需要的所有值都应该在时间点可用。在您的情况下,您尝试传递的response对象是一个本地实例,其范围仅在server.get的回调中(您设置setTimeout)。

有几种方法可以解决此问题。您可以在get_data所属的外部作用域中保留响应实例的副本,也可以将get_data完全移入内部并删除setTimeout。建议不要使用第一个解决方案,因为在1秒内多次调用getChatData,最后一个副本将占主导地位。

但我的建议是将data保留在数据库中,并在调用getChatData后显示它。