2016-08-16 33 views
0

我试图制作一个小型Web服务器进行测试。我用NodeJS做了。但意外的事情发生了。无法正确显示NodeJS服务器传递的网页。但是,当我使用php + Apache时,该网页完美运行。当我打开客户端收到的源代码时,没有可观察到的差异。这里是我的代码:NodeJS服务器上的Response.write()或.toString()(bug?)

Server.js

var http = require('http'); 
var fs = require('fs'); 
var url = require('url'); 
var Max = 30; 
var port = process.argv[2]; 

var server = http.createServer(function (request, response) { 
    var pathname = url.parse(request.url).pathname; if (pathname == "") pathname = "index.html"; 
    console.log("Request for " + pathname + " received."); 
    fs.readFile(pathname.substr(1), function (err, data) { 
      if (err) { 
        console.log(err); 
        response.writeHead(404, {'Content-Type': 'text/html'}); 
      } else { 
        response.writeHead(200, {'Content-Type': 'text/html'}); 
        response.write(data.toString()); 
      } 
      response.end(); 
    }); 
}).listen(port); 

console.log('Server running at http://127.0.0.1:8081/'); 


var sockets = {}, nextSocketId = 0; 
server.on('connection', function (socket) { 
    var socketId = nextSocketId++; 
    sockets[socketId] = socket; 
    console.log('socket', socketId, 'opened'); 

    socket.on('close', function() { 
      console.log('socket', socketId, 'closed'); 
      delete sockets[socketId]; 
    }); 

    socket.setTimeout(4000); 
}); 

function anyOpen(array) { 
    for (var ele in array) { 
      if (ele) return true; 
    } 
    return false; 
} 


(function countDown (counter) { 
    console.log(counter); 
    if (anyOpen(sockets)) { 
      return setTimeout(countDown, 1000, Max); 
    } else if (counter > 0) { 
      return setTimeout(countDown, 1000, counter - 1); 
    }; 
    server.close(function() { console.log('Server closed!'); }); 
    for (var socketId in sockets) { 
      console.log('socket', socketId, 'destroyed'); 
      sockets[socketId].destroy(); 
    } 
})(Max); 

Chatroom2-0.php

<!DOCTYPE html> 
<html> 
<head> 
<style> 
    textarea { 
      width:95%; 
      rows:50; 
      height:80%; 
    } 
</style> 
<script  src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"> </script> 
<script type="text/javascript"> 

    var str = ""; 
    function enter(e){ 
      if (e.keyCode == 13 && document.getElementById("Input").value) { 
        //alert("Enter!!!!"); 
        sendInput(); 
        document.getElementById("Input").value = ""; 
      } 
    }; 

    function updateBoard() { 
      xmlhttp = new XMLHttpRequest(); 

      xmlhttp.onreadystatechange = function() { 
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
          document.getElementById("MsgBoard").innerHTML = xmlhttp.responseText; 
        } 
        var textarea = document.getElementById('Output'); 
        textarea.scrollTop = textarea.scrollHeight; 
      }; 

      xmlhttp.open("POST","Server.php",true); 
      xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
       xmlhttp.send("Type=Username&Content="+document.getElementById("Username").value); 
    }; 

    function sendInput() { 
      username = document.getElementById("Username").value; if (!username) username = "Gotemptyname"; 
      msg = document.getElementById("Input").value; if (!msg) msg = "GotNothing"; 
      if (msg) { 
        xmlhttp = new XMLHttpRequest(); 
        xmlhttp.open("POST","Server.php",true); 
        //xmlhttp.open("POST","test.txt",true); 
        //xmlhttp.send(); 
        xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");     
        xmlhttp.send("Type=Message&Username="+username+"&Content="+msg); 
        //alert(xmlhttp.responseText); 
      } 
    }; 

</script> 
</head> 
<body onload="setInterval('updateBoard()',1000)"> 
<div id="MsgBoard"></div> 
<form name="UsrInput"> 
<?php 
    if (isset($_POST["Username"])) 
      echo '<input type="text" id ="Username" value="'.$_POST["Username"].'" disable>'; 
    else { 
      header("Location: /login/index.html"); 
      die(); 
    } 
?> 
<input type="text" id="Input" onkeypress="enter(event)" value="" > 
</form> 
</body> 
</html> 

用户应该能够登录后访问Chatroom2-0.php。登录功能也可以。但是当我进入Chatroom2-0.php时,我的文本框旁边有一个字符串。

'; else {header(“Location:/login/index.html”);死(); }?>

我注意到字符串是我的php代码在文件中的一部分。我不知道发生了什么事。我认为这可能与response.write()或data.toString()函数有关。也许函数在我的编码中改变了一些东西?我怎么能解决这个问题。

无论如何,我很感激任何帮助。

回答

2

问题是,您正尝试在nodejs服务器上运行php代码。没有解决方案,因为节点不是PHP解释器,所以它将所有内容视为html文本;因此你的php代码出现在页面上。您需要为节点项目创建完全不同的html。

+0

哦,我应该注意到,第一次(我现在感觉很愚蠢......)。谢谢,很多 – FunnyFunkyBuggy

+1

你是最受欢迎的。不要因为不知道某事而感到愚蠢,因此它不会阻止你在未来提出问题。 Stack交流社区在人们不知道时不会羞愧地提问的情况下蓬勃发展。继续问! – kennasoft