为什么我不能使用响应?写入fs.readFile

Why can't I use response.write in fs.readFile?

本文关键字:写入 fs readFile 响应 不能 为什么      更新时间:2023-09-26

下面是我的代码。

var server = http.createServer(function(request, response){
console.log('Connection');
var path = url.parse(request.url).pathname;
path = path.substr(1);
switch(path){
    case '':
        response.writeHead(200, {'Content-Type':'text/html'});
        response.end();
        break;
    case 'socket.html':
        response.write("read file"); //works
        fs.readFile(__dirname + '''' + path, function(error, data){
            if (error){
                response.writeHead(404); //this doesn't work
            }
            else{
                response.writeHead(200, {'Content-Type':'text/html'}); //doesn't work
                response.write("OK"); //doesn't work
            }
        });
        response.end();
        break;
    default:
        response.writeHead(404);
        response.end();
        break;
}
});

服务器监听端口8001,当我访问http://myhost.com:8001/socket.html时,我只能看到"读取文件"。response中的方法似乎在回调函数readFile中被破坏了。有人能告诉我为什么并给我一个解决方案吗?谢谢!(原谅我的英语不好:))

您过早地结束了响应。传递给readFile的函数是一个异步回调函数,它在整个switch语句之后运行。