2017年2月17日 星期五

node.js POST 及 GET的讀取

使用Node.js 架Server時,我們常需要從Client端接收GET或POST方法傳來的參數,
有兩個module可以利用,url及querystring

下面是簡單的範例:
(function(){
   //獲取modules
  var http = require('http');   //架Server用
  var url = require('url');      //解析url,包括GET參數
  var querystring = require('querystring');     //可以用來解析POST的參數語句

  //建立Server
  var server = http.createServer(function(request, response) {
    //得到url資訊
    var urlInfo = url.parse(request.url, true);
    //取得url的path
    var pathname = urlInfo.pathname;
   
    response.writeHead(200, {
      "Content-Type": "application/json",
      "Access-Control-Allow-Origin": "http://XXX"  //如果要當做api給Client利如用Ajax呼叫的
                                                                                   //話,要加跨域的Header
    });
    //判斷是不是要處理的path name
    if (pathname === "/somePathName") {
       var GET_data = urlInfo.query;  // 得到GET的參數資訊
       console.log(GET_data);

       //準備得到POST的參數資訊
       var POST_data = '';     //POST_data 用來存POST資訊
       //POST的資訊息會不斷送進來,不斷送的時候觸發data事件,結束觸發end事件,
       // 綁在request上面以接收POST參數資訊
       request.on("data", function(data){
            POST_data += data
       });  
       request.on("end", function(){
           //可以利用querystring module來將POST參數資訊轉成物件
           var postDataObject = querystring.parse(POST_data );
           console.log(postDataObject);
       });
    } else {
      //
    }
  });

  設置Server的Port
  server.listen(3000);

  console.log('Server跑起來了,現在時間是:' + new Date());
})();

這邊要注意的是,POST的資料不是一次性的得到,而是不斷地傳送進Server,所以我們在request上綁定了"data"及"end"事件來監聽POST資料的傳遞狀態,在"data"事件中不斷地組合POST參數資料,當資料傳送後"end"事件會被觸發,這時才會得到完整的POST參數資料。

參考資料:
  1. Node.jS初學者筆記(1)-用GET傳送資料
  2. Node.jS初學者筆記(2)-用POST傳送資料

沒有留言 :

張貼留言