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

标签 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'});
        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 时,我只能看到“读取文件”。响应方法似乎在回调函数 readFile 中损坏了。 有人可以告诉我为什么并给我一个解决方案吗?谢谢! (请原谅我糟糕的英语 :))。

最佳答案

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

关于javascript - 为什么我不能在 fs.readFile 中使用 response.write?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16909054/

相关文章:

javascript - Ghost 中是否可以在每个帖子的基础上包含外部 javascript?

javascript - 使用 Puppeteer 将结果抓取到 JSON 时重启无限

javascript - 如何捕获 jQuery AJAX 错误?

javascript - 无法使用 Express-validator 验证用户输入

javascript - 如何在 WordPress、PHP、JavaScript 上使用正则表达式从字符串(URL)中删除特殊字符

javascript - 添加特定数量的输入字段

javascript - ytdl 和 ffmpeg 的 Node js async/await promise 问题

node.js - 为什么多次调用 jest mockResolvedValueOnce 返回相同的值?

javascript - 避免多次遍历数组以重新排列元素

javascript - HTML5 Canvas : going from shapes to objects?