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

response written to page only on second request

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 请求以获取目录中可用的文件列表,并将它们作为响应发回。

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

谁能帮忙。提前致谢!!

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 模块不包含路由。