没有在nodejs中使用response.end()

根据我的知识, response.end()应该在每个响应之后根据这里描述的nodejs api documenetation调用

但是当我调用response.end()它不会将html文件加载到浏览器。

这是我的代码:

 var http=require('http'); var fs=require('fs'); http.createServer(creatingRequest).listen(8000); console.log("connected to the server"); function printMe(response) { response.writeHead(404,{"Context-Type":"text/plain"}); response.write("this has errors "); response.end(); console.log("finished "+response.finished);//true if response ended console.log("printMe"); } function creatingRequest(request,response) { if ((request.url=="/" ) && request.method=="GET") { response.writeHead(200,{"context-type":"text/html"}); fs.createReadStream("./index.html").pipe(response); console.log("loading html"); response.end(); console.log("finished "+response.finished);//true if response ended } else { printMe(response); } } 

但是,如果它运行printMe()函数,那么“ 这有错误 ”的文本将出现在浏览器上。

这是我的index.html:

 <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> </head> <body> Hi,this is my page </body> </html> 

请帮助我,预先感谢…

当stream完全读/写到响应时,您应该结束响应。

例如,您可以在stream中侦听end事件,并可以触发resp.end()

 if ((request.url=="/" ) && request.method=="GET"){ response.writeHead(200,{"context-type":"text/html"}); var stream = fs.createReadStream("./index.html"); stream.pipe(response); stream.on('end', function(){ console.log("loading html"); response.end(); console.log("finished "+response.finished);//true if response ended }); }