代碼根據網上的教程進行了一些修改,畢竟參看教程得出的結果總與教程不同。文章也只列出一些跟我本身學習有關的知識,其餘並不展開,或許是我不懂,或許是不用說也知道。javascript
<示例一>html
根據瀏覽器的請求,獲取url中的信息並將得到的對象的字符串形式做爲反饋返回到頁面上來。java
代碼:node
//server.js var http = require('http'); var url = require('url'); var util = require('util'); http.createServer(function(req, res){ res.writeHead(200, {'Content-Type': 'text/plain'}); res.end(util.inspect(url.parse(req.url, true))); }).listen(3000);
結果:jquery
知識點:瀏覽器
在cmd控制檯運行了node server.js後,在瀏覽器輸入網址,執行結果如上圖。頁面得到了一個Url對象的字符串,這個被轉成字符串要歸功於util.inspect()方法。至於引入的url包如何使用及其方法,目前我還沒學到,控制檯打印出來看了看,不甚懂,此處姑且只管結果。服務器
<示例二>函數
獲取url中的鍵值對post
代碼:學習
var http = require('http'); var url = require('url'); var util = require('util'); http.createServer(function(req, res){ res.writeHead(200, {'Content-Type': 'text/plain'}); // 解析 url 參數 var params = url.parse(req.url, true).query; res.write("網站名:" + params.name); res.write("\n"); res.write("網站 URL:" + params.url); res.end(); }).listen(3000);
結果:
知識點:
根據示例一能夠知道咱們是在Url對象中取jquery得到鍵值對的。向響應的報文寫入內容既可使用示例一中的方法在res.end()方法中直接添加參數,也能夠如實例二單寫res.write()(此處內容須要之後單獨學習)。頁面中的內容出現了亂碼,多是中文在編碼解析的時候不一致致使的(待解決,目前用純英文內容能夠解決問題)。
另,示例一和示例二均爲獲取GET請求內容,因爲GET請求直接被嵌入在路徑中,URL是完整的請求路徑,包括了?後面的部分,所以能夠手動解析後面的內容做爲GET請求的參數。node.js中url模塊中的parse函數提供了這個功能。
<示例三>
代碼:
var http = require('http'); var util = require("util"); var querystring = require('querystring'); http.createServer(function(req, res){ // 定義了一個post變量,用於暫存請求體的信息 var post = ''; // 經過req的data事件監聽函數,每當接受到請求體的數據,就累加到post變量中 req.on('data', function(chunk){ post += chunk; }); // 在end事件觸發後,經過querystring.parse將post解析爲真正的POST請求格式,而後向客戶端返回。 req.on('end', function(){ post = querystring.parse(post); res.end(util.inspect(post)); console.log(util.inspect(post)); }); }).listen(3000);
結果:
知識點:
代碼只是演示了post請求的過程,最終由於沒有任何表單的提交,致使得到的內容爲空。
<示例四>
代碼:
var http = require('http'); var querystring = require('querystring'); var postHTML = '<html><head><meta charset="utf-8"><title>Node.js 實例</title></head>' + '<body>' + '<form method="post">' + '網站名: <input name="name"><br>' + '網站 URL: <input name="url"><br>' + '<input type="submit">' + '</form>' + '</body></html>'; http.createServer(function (req, res) { var post = ""; req.on('data', function (chunk) { post += chunk; }); req.on('end', function () { // 解析參數 post = querystring.parse(post); // 設置響應頭部信息及編碼 res.writeHead(200, {'Content-Type': 'text/html; charset=utf8'}); if(post.name && post.url) { // 輸出提交的數據 res.write("網站名:" + post.name); res.write("<br>"); res.write("網站 URL:" + post.url); } else { // 輸出表單 res.write(postHTML); } res.end(); }); }).listen(3000);
結果:
(提交前)
(提交後)
知識點:
querystring.parse()方法用於將鍵值對形式的字符串轉換爲對象。post請求不讀取?後面的參數,每次加載連接都會進行請求。
另,示例三和示例四爲POST 請求,POST 請求的內容所有的都在請求體中,http.ServerRequest 並無一個屬性內容爲請求體,緣由是等待請求體傳輸多是一件耗時的工做。
好比上傳文件,而不少時候咱們可能並不須要理會請求體的內容,惡意的POST請求會大大消耗服務器的資源,全部node.js 默認是不會解析請求體的,當你須要的時候,須要手動來作。
參考: