仅在第二次请求时写入页面的响应

时间:2017-08-26 05:59:56

标签: node.js httpmodule

var http = require('http');
var fs = require('fs');
var path = process.argv[2];
var str="";
function onRequest(request, response) {
    str += "";
    console.log("Request received" + path);
    fs.readdir(path, function(err, items) {
        str += items;
    });
    response.writeHead(200, {"Context-Type": "text/plain"});
    response.write(new Buffer(str).toString());
    response.end();
}
http.createServer(onRequest).listen(8000);

上面的代码片段创建了一个http服务器,它从用户获取一个目录路径作为参数。发出http请求以获取目录中可用的文件列表,并将其作为响应发送回去。

仅在第二个请求时将响应写入页面。第一次请求时页面显示为空。

任何人都可以提供帮助。在此先感谢!!

1 个答案:

答案 0 :(得分:1)

Javascript是非阻止的,所以

response.writeHead(200, {"Context-Type": "text/plain"});
response.write(new Buffer(str).toString());
response.end();

将在

之前执行
str += items;

使用

fs.readdir(path, function(err, items) {
    // Handle error
    str += items;
    response.writeHead(200, {"Context-Type": "text/plain"});
    response.write(new Buffer(str).toString());
    response.end();
});

它会在readdir之后发送回复。

在Javascript中,不会为每个新请求启动程序(如在PHP中)。因此,您的全局变量将在所有请求之间共享。如果您不希望将var str="";放入onRequest

如果您有多条路线,您还希望查看express之类的内容,因为http模块不包含路由。