需要帮助使用socket.io的路由

时间:2015-04-12 14:16:46

标签: node.js

我是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);

1 个答案:

答案 0 :(得分:1)

你有两个问题。第一个是路径不匹配 - 它是/socket.html,而不是socket.html,所以这是你必须放在case中的。

其次,您在response.end()语句之后立即调用switch,但/socket.html情况是异步的,因此此时尚未完成。您应该在每个response.end()中单独调用case,以便允许完成异步操作。