无法访问socket.html

我想模拟客户端 – 服务器节点。

这是我的server.js

var http = require("http"); var url = require('url'); var fs = require('fs'); var server = http.createServer(function(request, response){ console.log('Connection'); var path = url.parse(request.url).pathname; switch(path){ case '/': response.writeHead(200, {'Content-Type': 'text/html'}); response.write('hello world'); break; case '/socket.html': fs.readFile(__dirname + path, function(error, data){ /* if (error){ response.writeHead(404); response.write("opps this doesn't exist - 404 1"); } */ response.writeHead(200, {'Content-Type': 'text/html'}); // response.write("data terbaca 2"); response.write(data, "utf8"); }); response.writeHead(200, {'Content-Type': 'text/html'}); response.write('hello world2 + ' + __dirname + ' ' + path); break; default: response.writeHead(404); response.write("opps this doesn't exist - 404 3"); break; } response.end(); }); server.listen(8000); 

这里是我的客户端的HTML

 <html> <head></head> <body>Ini Socket html lohhh</body> </html> 

我的目录结构在D:/ cobaa 1. server.js 2. socket.html

我节点的服务器,并访问localhost:8000 / socket.html并获得

你好world2 + D:\ cobaa /socket.html

有谁能帮我解决问题吗? 十分感谢 :)

这里的问题是,在你真正写下文件内容之前,你正在完成响应。 fs.readFile是asynchronous的,因此文件内容的写入被延迟直到读取完成,所以它首先到达response.end()并执行它。

只有在读取文件后才能发送响应。 所以把你所有的回应处理在callback里面

  fs.readFile(__dirname + path, function(error, data){ /* if (error){ response.writeHead(404); response.write("opps this doesn't exist - 404 1"); } */ response.writeHead(200, {'Content-Type': 'text/html'}); response.write(data, "utf8"); response.write('hello world2 + ' + __dirname + ' ' + path); response.end(); });