Node.js GET/POST請求的練習過程

代碼根據網上的教程進行了一些修改,畢竟參看教程得出的結果總與教程不同。文章也只列出一些跟我本身學習有關的知識,其餘並不展開,或許是我不懂,或許是不用說也知道。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 默認是不會解析請求體的,當你須要的時候,須要手動來作。

 

參考:

  1. http://www.runoob.com/nodejs/node-js-get-post.html【Node.js GET/POST請求】
相關文章
相關標籤/搜索