繁体   English   中英

Response.write()不返回值

[英]Response.write() not returning value

我一直在关注本教程 ,以获取有关nodejs的介绍,但是我在使用response.write()返回某些内容时遇到了麻烦。

当我转到domain:8001时,我的server.js代码可以很好地返回“ hello world”,但导航至domain:8001 / socket.html会返回黑屏。

我使用console.log来检查写“ socket在这里”的代码。 正在执行,但我不确定为什么它什么也没做。

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解析/归一__dirname + path绝对路径,然后确保该绝对路径以您的公共目录的绝对路径开头。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM