Javascript 为什么我不能在fs.readFile中使用response.write?

Javascript 为什么我不能在fs.readFile中使用response.write?,javascript,node.js,Javascript,Node.js,这是我的密码 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'})

这是我的密码

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,当我访问时,只能看到读取的文件。响应中的方法在回调函数readFile中似乎已损坏。 有人能告诉我为什么,给我一个解决办法吗?谢谢
请原谅我糟糕的英语:。

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

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

删除line response.writeread文件并重试删除line response.writeread文件并重试同样,slebtman评论道:您不能在响应头之前写入任何内容。谢谢,我使用readFileSync而不是readFile解决了这个问题。使用readFileSync可以吗?我写了与本教程完全相同的代码,似乎他使用readFile和end response的效果很好。看起来该教程是错误的,但对于其他情况也可以。是的,readFileSync还可以。@bfavaretto很抱歉,这给您带来了一些问题。希望本教程的repo能为您提供一个它应该如何工作的示例。谢谢你的跟进,@DanielNill!我会通知询问者。还有,slebtman的评论:你不能在响应头之前写任何东西。谢谢,我用readFileSync而不是readFile解决了这个问题。使用readFileSync可以吗?我写了与本教程完全相同的代码,似乎他使用readFile和end response的效果很好。看起来该教程是错误的,但对于其他情况也可以。是的,readFileSync还可以。@bfavaretto很抱歉,这给您带来了一些问题。希望本教程的repo能为您提供一个它应该如何工作的示例。谢谢你的跟进,@DanielNill!我会通知询问者的。