2016-03-09 67 views
0

在下面的代碼中,我試圖從MySQL中檢索數據並將它們顯示在HTML頁面中。我測試通過顯示在控制檯中的數據連接,它工作得很好,但問題是,數據不能顯示在HTML頁面上:顯示從節點js中的MySQL數據庫中檢索到的數據

var http = require("http"); 
var mysql = require('mysql'); 

http.createServer(function (request, response) { 

    response.writeHead(200, {'Content-Type': 'text/plain'}); 

    //response.end('Hello World\n'); 

    var connection = mysql.createConnection(
    { 
     host  : 'localhost', 
     user  : 'root', 
     password : 'somepass', 
     database : 'Students', 
    } 
); 

connection.connect(); 

var queryString = 'SELECT * FROM Student'; 

connection.query(queryString, function(err, rows, fields) { 
    if (err) throw err; 

    for (var i in rows) { 
     response.end('Name: ', rows[i].Name); //this doesn't work, it only shows Name: but doesn't show the retrieved name from the databased 
     console.log('Name: ', rows[i].Name); //this works fine 
    } 
}); 

}).listen(8081); 

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

任何人可以幫助我解決這個問題?

+0

據我所知response.end用於發送流中的最後一位。你應該首先使用response.write在流中寫入,然後才結束(你正在做一個循環) –

回答

1

Have you read the documentation?

首先,需要到Response.End三個可選參數:數據,編碼和回調。你在做什麼,是發送數據「姓名:」,編碼'rows [i] .Name'。這會導致它自身的問題。

此外,您在for循環中調用此方法,這意味着第一次調用.end時,您停止發送更多。正如它在文檔中所說的那樣,.end表示數據傳輸的結束,並且沒有更多的數據即將到來(但在你的情況下)。

你應該這樣做,是使用response.write(「Name:」+ rows [i] .Name); 您應該注意以下事項:

  1. 我使用.WRITE,不.END,這意味着我可以繼續添加要發送的數據。
  2. 我使用+而不是逗號。這意味着我將字符串行[i] .Name追加到字符串「Name:」,所以最終結果將是「Name:」。

最後,當for循環完成時,您應該調用response.end()而沒有參數,表示您已完成要發送的消息。

希望這有助於下次仔細閱讀文檔,因爲它可能會很清楚地解釋這些事情:)快樂編程!

+0

這是一個非常好的解釋。非常感謝。 – Nasser

相關問題