Response.write()不返回值

我一直在关注这个教程来介绍nodejs,但是我在使用response.write()方法返回时遇到了麻烦。

我的server.js代码工作正常,当我去域:8001返回“你好世界”,但导航到域:8001 / socket.html返回一个黑屏。

我已经使用console.log来检查编写“套接字在这里”的代码。 正在执行,但我不知道为什么它没有做任何事情。

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; console.log(__dirname); console.log(path); 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"); } else{ response.writeHead(200, {"Content-Type": "text/html"}); response.write("socket is here."); } }); break; default: response.writeHead(404); response.write("opps this doesn't exist - 404"); break; } response.end(); }); server.listen(8001); var io = require('socket.io').listen(server); 

socket.html :(虽然它不应该包含在其中)

 <html> <head> <script src="/socket.io/socket.io.js"></script> </head> <body> <script> var socket = io.connect(); </script> <div>This is our socket.html file</div> </body> </html> 

在等待fs.readFile()完成之前,您将结束响应。 尝试这个:

 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; console.log(__dirname); console.log(path); 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"); } else{ response.writeHead(200, {"Content-Type": "text/html"}); response.write("socket is here."); } response.end(); }); return; default: response.writeHead(404); response.write("opps this doesn't exist - 404"); break; } response.end(); }); server.listen(8001); var io = require('socket.io').listen(server); 

另外,做fs.readFile(__dirname + path, ...); 是有潜在危险的,因为有人可以发送/../../../../../../etc/passwd这样的请求。 你应该做什么,而不是使用path模块来解决/规范化__dirname + path到一个绝对path,然后确保该绝对path以您的公共目录的绝对path开始。