NodeJS收發GET和POST請求

目錄:javascript

一 express框架接收php

二 接收Gethtml

三 發送Getjava

四 接收Postnode

五 發送Postexpress

 

 

一 express框架接收數組

1
2
3
4
5
app. get ( '/' ,function(req,res) {
     var  url = req.query.url;
     var  name = req.query.name;
     console.log(url, name);
});

 

 

二 接收Get瀏覽器

1. get參數在req.url上app

2. 使用url.parse將數據由字符串轉變爲obj框架

 

index.js:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var  http = require( 'http' );
var  url = require( 'url' );
var  util = require( 'util' );
 
//req 請求信息   res返回信息
http.createServer(function(req, res){
     res.writeHeader(200, { 'Content-Type' : 'text/javascript;charset=UTF-8' });   //狀態碼+響應頭屬性
 
     // 解析 url 參數
     var  params  = url.parse(req.url,  true ).query;   //parse將字符串轉成對象,req.url="/?url=123&name=321",true表示params是{url:"123",name:"321"},false表示params是url=123&name=321
     res.write( "網站名:"  params .name);
     res.write( "\n" );
     res.write( "網站 URL:"  params .url);
     res.end();
 
}).listen(3000);

 

瀏覽器打開:

1
http: //127.0.0.1:3000/?url=123&name=321

 

網頁顯示:

1
2
網站名:321
網站 URL:123

 

三 發送Get

index.js:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
var  http = require( 'http' ); 
   
var  qs = require( 'querystring' ); 
   
var  data = { 
     a: 123, 
     time:  new  Date().getTime()}; //這是須要提交的數據 
   
   
var  content = qs.stringify(data); 
   
var  options = { 
     hostname:  '127.0.0.1'
     port: 10086, 
     path:  '/pay/pay_callback?'  + content, 
     method:  'GET' 
}; 
   
var  req = http.request(options, function (res) { 
     console.log( 'STATUS: '  + res.statusCode); 
     console.log( 'HEADERS: '  + JSON.stringify(res.headers)); 
     res.setEncoding( 'utf8' ); 
     res. on ( 'data' , function (chunk) { 
         console.log( 'BODY: '  + chunk); 
     }); 
}); 
   
req. on ( 'error' , function (e) { 
     console.log( 'problem with request: '  + e.message); 
}); 
   
req.end();

  

 

四 接收Post

 當請求這個頁面時,若是post數據中沒有name和url,則返回一個提交頁面;若是有name和url,則打印。

1. post請求會觸發"data"事件。

2. chuck使用+=保存,由於會額外請求favicon.ico,致使body={}。

3. 請求結束,會觸發"end"事件。將chuck反序列化querystring.parse(body)爲對象數組, 使用body.name訪問post變量。

 

index.js:

1
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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  body =  "" ;
 
     //請求連接
     console.log(req.url);
 
     //每當接收到請求體數據,累加到post中
     req. on ( 'data' , function (chunk) {
         body += chunk;   //必定要使用+=,若是body=chunk,由於請求favicon.ico,body會等於{}
         console.log( "chunk:" ,chunk);
     });
 
     //在end事件觸發後,經過querystring.parse將post解析爲真正的POST請求格式,而後向客戶端返回。
     req. on ( 'end' , function () {
         // 解析參數
         body = querystring.parse(body);   //將一個字符串反序列化爲一個對象
         console.log( "body:" ,body);
         // 設置響應頭部信息及編碼\<br><br>      res.writeHead(200, {'Content-Type': 'text/html; charset=utf8'});
1
2
3
4
5
6
7
8
9
10
         if (body.name && body.url) {  // 輸出提交的數據
             res.write( "網站名:"  + body.name);
             res.write( "<br>" );
             res.write( "網站 URL:"  + body.url);
         else  {   // 輸出表單
             res.write(postHTML);
         }
         res.end();
     });
}).listen(3000);

 

瀏覽器中打開:http://127.0.0.1:3000/

  

第一次訪問127.0.0.1,post中沒有name和url,顯示提交頁面。

點擊提交後,網頁會打印出以下結果。

問題:

1. req.on("end"事件會屢次觸發。由於會請求favicon.ico。

 

2.  res.writeHead(200, {'Content-Type': 'text/html; charset=utf8'}); 

text/html的意思是將文件的content-type設置爲text/html的形式,瀏覽器在獲取到這種文件時會自動調用html的解析器對文件進行相應的處理。

text/plain的意思是將文件設置爲純文本的形式,瀏覽器在獲取到這種文件時並不會對其進行處理。

 

五 發送Post

index.js:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
var  http = require( 'http' );
var  querystring = require( 'querystring' );
 
var  contents = querystring.stringify({
     name: 'byvoid' ,
     email: 'byvoid@byvoid.com' ,
     address: 'Zijing'
});
 
var  options = {
     host: 'www.byvoid.com' ,
     path: '/application/node/post.php' ,
     method: 'POST' ,
     headers:{
         'Content-Type' : 'application/x-www-form-urlencoded' ,
         'Content-Length' :contents.length
     }
}
 
var  req = http.request(options, function(res){
     res.setEncoding( 'utf8' );
     res. on ( 'data' ,function(data){
         console.log( "data:" ,data);    //一段html代碼
     });
});
 
req.write(contents);
req.end;
相關文章
相關標籤/搜索