2016-08-16 42 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