我是Node.js的新手,我正在尝试在server1.js文件中配置我的路由。
当我转到我的localhost:3000/socket.html
时,它不会读取socket.html
的情况,而是直接进入默认情况。
然而,当我在控制台日志上输出路径时..我看到路径输出正确/socket.html
我真的很困惑,不明白为什么它没有达到那个案例陈述。
任何帮助都会非常感激。以下是我正在使用的代码。
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(path); //Shows the correct path in console
switch(path){
//This case statement works
case '/':
response.writeHead(200,{'Content-Type': 'text/html'});
response.write('hello world');
break;
//It doesn't reach this case statement
case 'socket.html':
fs.readFile(__dirname + path, function(error,data) {
if(error){
response.writeHead(404);
resonse.write("oops this file doesn't exist - 404");
} else {
response.writeHead(200, {"Content-Type" : "text/html"});
response.write(data,"utf8");
}
});
console.log('socket path');
break;
default :
response.writeHead(404);
response.write("oops this doesn't exist - 404 coming from deafult");
break;
}
response.end();
});
server.listen(3000);
答案 0 :(得分:1)
你有两个问题。第一个是路径不匹配 - 它是/socket.html
,而不是socket.html
,所以这是你必须放在case
中的。
其次,您在response.end()
语句之后立即调用switch
,但/socket.html
情况是异步的,因此此时尚未完成。您应该在每个response.end()
中单独调用case
,以便允许完成异步操作。