nodejs進階(5)—接收請求參數


1. get請求參數接收

我們簡單舉一個需要接收參數的例子

如果有個查找功能,查找關鍵詞需要從url里接收,http://localhost:8000/search?keyword=地球。通過前面的進階3教程《nodejs進階(3)—路由處理》重介紹的url模塊,我們知道接收方法如下這樣寫

 1 //----------------6_param------------------------------------      
 2 var http = require('http');                          
 3 var url = require('url');          
 4 var router = require('./router');        
 5 http.createServer(function (request, response) {                          
 6     if(request.url!=="/favicon.ico"){  //清除第2此訪問              
 7         var rdata  =  url.parse(request.url,true).query;   //獲取參數
 8         if(rdata['keyword']!=undefined){  
 9             console.log(rdata['keyword']);      
10         }       
11         console.log("server執行完畢");   
12         response.end();  
13     }                          
14 }).listen(8000);                          
15 console.log('Server running  at  http://127.0.0.1:8000/');       

那么在我們的控制台里會輸出查詢此“地球”。

get請求我們都可以通過上述這種方式獲取參數。

2. post請求參數接收

如果是post請求,這些參數不是通過url傳遞的,是包含在request請求體中。請求體里的流需要以事件形式進行接收

req.on('data',  function(chunk){//通過req的data事件監聽函數,每當接受到請求體的數據,就累加到post變量中      

             post  +=  chunk;      

  });      

我們新建一個頁面,其中有一個post請求

 1 <html>
 2 <head>
 3 </head>
 4 <body>
 5 登錄:
 6 <p>這是一個段落</p>
 7 <h1>樣式1</h1>
 8 <form action="/submitLogin" method="post">
 9 用戶名:<input value="" name="name">
10 密碼:<input value=""  name="pwd">
11 <input type="submit" value="提交">
12 </form>
13 <!--img src="./showImg"></img-->
14 </body>
15 <html>

我們請求login,有兩個輸入項name和pwd,當我們輸入值后點擊提交,會發post請求到http://localhost:8000/submitLogin

我們對router.js進行擴展,添加submitLogin處理方法。

之前需要引入'querystring',該模塊用於實現URL參數字符串與參數對象的互相轉換。

大家需要了解學習兩個常用的方法

1)require('querystring').parse("name=eee&pwd=123")  結果:Object {name: "eee", pwd: "123"}

2)require('querystring').stringify({name:'eee',pwd:'123'})  結果:"name=eee&pwd=123"

 

 1 //-----------------router.js--------------------------------
 2 var file = require('./models/file');
 3 var  url  =  require('url');      
 4 var  querystring  =  require('querystring');  //post需導入     
 5 module.exports={
 6     login:function(req,res){
 7         res.writeHead(200,  {'Content-Type':'text/html'});    
 8         var data  =  file.readfileSync('./views/login.html');      
 9         res.write(data);  
10         res.end();      
11     },
12     register:function(req,res){
13         var data=file.readfileSync('./views/register.html');//使用同步讀取
14         res.write(data);
15         res.end();
16     },
17     showImg:function(req,res){
18         file.readImg('./imgs/dog.jpg',res);//使用同步讀取
19     },
20     submitLogin:function(req,res){
21         var  post  =  '';  //定義了一個post變量,用於暫存請求體的信息      
22         req.on('data',  function(chunk){//通過req的data事件監聽函數,每當接受到請求體的數據,就累加到post變量中      
23             post  +=  chunk;      
24         });      
25         //-------注意異步-------------      
26         req.on('end',  function(){   //在end事件觸發后,通過querystring.parse將post解析為真正的POST請求格式,然后向客戶端返回。      
27             post  =  querystring.parse(post);      
28             console.log('name:'+post['name']+'\n');        
29             console.log('pwd:'+post['pwd']+'\n');
30             if(post['name']=="fff"&&post['pwd']=="123"){//簡單寫登錄成功的匹配
31                 res.write("登錄成功!")
32             }else{
33                 res.write("用戶名密碼不正確")
34             }
35             res.end();  
36         });    
37     }
38 } 

當我們想login頁面輸入用戶名和密碼參數時,如果輸入fff和123  這時候跳轉到loginSubmit輸出登錄成功!

如果輸入其他值跳轉后會提示:用戶名密碼不正確


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM