node js中的req.body,req.query,req.params取參數


1、原生node中怎么獲取get/post請求參數

1.1 處理get請求參數

使用node自帶的核心模塊----url模塊

url.parse();方法將一個完整的URL地址,分為很多部分,常用的有:host、port、pathname、path、query。
第一個參數是地址,
第二個參數默認是false,設置為ture后,將字符串格式轉換為對象格式。字符串(“a=1&b=2”)轉換為了對象格式({a: 1,b: 2})。

代碼:

1 var urlObj = url.parse(req.url ,true);
2 var query = urlObj.query;

1.2 處理post請求參數

POST請求一般會提交數據給服務器,服務器在接收數據的時候也是分塊接收的;

要想獲得post參數對象,需要用到第三方包querystring

代碼:

 1 const http = require('http');  2 const server = http.createServer();  3 server.listen(3000, () => console.log('啟動了'));  4 
 5 // 只要有瀏覽器發來請求,就會觸發下面的事件
 6 server.on('request', (req, res) => {  7     // console.log('123');
 8     // console.log(req.method); // POST
 9     // POST請求,意思是瀏覽器提交數據給服務器
10     // 服務器肯定要接收這些數據,並把這些數據保存
11     // 如何接收POST提交過來的數據
12     /** 13  * 1. 給req注冊data事件,當有數據提交過來就會觸發,事件的作用是接收數據,接收大量數據的時候,是分塊接收的 14  * 2. 給req注冊end事件,當數據全部接收完畢,會觸發 15      */
16     // 先定義一個空字符串,里面准備存放接收到的數據
17     let str = ''; 18     req.on('data', (chunk) => { 19         str += chunk; // 把接收到的一塊數據拼接到str中
20  }); 21     req.on('end', () => { 22         console.log(str); // id=1&name=zs&age=43
23         // 將接收到的數據,賦值給req.body
24         // req.body屬性本來不存在,是自定義的,你也可以用其他的名字
25         req.body = querystring.parse(str); // querystring.parse是將字符串轉成對象{id:1,bane:zs,age:43}
26  }); 27 
28 });    

2、express框架中獲取請求的參數方法

2.1 req.body

通常用來解析POST請求中的數據
req.body不是nodejs默認提供的,需要載入中間件body-parser中間件才可以使用req.body
例如前台代碼:

 1 <script>
 2     $('.btn-save').click(function (e) {
 3       e.preventDefault();
 4       var fd = new FormData($('form')[0]);
 5       
 6       $.ajax({
 7         type: 'post',
 8         url: '/updateHero',
 9         data: fd,
10         dataType: 'json',
11         success: function (res) {
12           console.log(res);
13           
14           alert(res.message);
15           if (res.code == 200) {
16             location.href = './index.html'
17           }
18         },
19         processData: false,
20         contentType: false
21       })
22     })
23   </script>

后台代碼:

 1 app.post('/updateHero', upload.single('heroIcon'), function (req, res) {
 2   // console.log(req.body);
 3   // console.log(req.file);
 4   // return;
 5   let id = req.body.id;  6   // 如果id為空或者不是數字類型的時候,參數錯誤,給出提示
 7   if (!id || isNaN(id)) {
 8     res.send('參數錯誤');
 9     return;
10   }
11   let sql = 'update heroes set ? where id = ?';
12   let values = {
13  name: req.body.heroName, 14     nickname: req.body.heroNickName,
15     skill: req.body.skillName,
16   }
17   // 如果圖片沒有改動req.file的值為undefined,所以需要單獨判斷
18   if (req.file) {
19     values.file = req.file.path
20   }
21   db(sql, [values, id], (err, result) => {
22     if (err) {
23       res.send({ code: 201, message: '修改失敗' });
24     } else {
25       res.send({ code: 200, message: '修改成功' });
26     }
27   })
28 })

2.2 req.query

由nodejs默認提供,無需載入中間件,此方法多適用於GET請求,解析GET請求中的參數
包含在路由中每個查詢字符串參數屬性的對象,如果沒有則為{}
舉例前台代碼:

 1 <script>
 2     // 獲取地址欄的id
 3     var id = location.search;
 4     // 發送ajax請求到/getHeroById端口,獲取信息
 5     $.get('/getHeroById' + id, function (res) {
 6       $('#heroName').val(res.name);
 7       $('#heroNickName').val(res.nickname);
 8       $('#skillName').val(res.skill);
 9       $('.preview').attr('src', res.file);
10       $('input[type=hidden]').val(res.id);
11     })
12   </script>

后台代碼:

 1 app.get('/getHeroById', (req, res) => {
 2   let id = req.query.id;
 3   // 如果id為空或者不是數字類型的時候,參數錯誤,給出提示
 4   if (!id || isNaN(id)) {
 5     res.send('參數錯誤');
 6     return;
 7   }
 8   let sql = 'select * from heroes where id=?'
 9   db(sql, id, (err, result) => {
10     if (err) throw err;
11     res.send(result[0]);  //  result的值是一個數組
12   }) 
13 })

2.3 req.params

nodejs默認提供,無需載入其他中間件

req.params包含路由參數(在URL的路徑部分),而req.query包含URL的查詢參數(在URL的?后的參數)。

例如,如果你有route/user/:name,那么“name”屬性可作為req.params.name。

post和get方式提交的表單的參數的獲取,都可用req.params獲取,但是需要注意的是:
假設現在我們以Post方式提交表單到 /user/signup?123userid=222,在后台我們要獲取到userid這個參數

這時如果我們通過req.params.userid獲取到的並不是post表單提交上來的參數,因為req.params包含路由參數(在URL的路徑部分),所以它在解析參數的時候包含URL中的路由,它獲取的順序是:
1.url中路由參數
2.post請求中提交參數
3.get請求中的參數
這里獲取到的是123,

如果提交的路徑為:/user/signup?userid=222
req.params.userid獲取到的就是post提交的參數

3、示例

3.1 獲取get請求的參數值(req.query)

1 router.get('/query', function (req, res,next) {
2     console.log('get請求參數 :',req.query);
3     console.log('post請求參數 :',req.body);
4 });

訪問http:/127.0.0.1:4000/query?username=123&pwd=456

3.2 獲取post請求的參數值(req.body)

html代碼:

1 <body>
2   <form action="/body" method="post">
3     <input type="text" name="username" value="123">
4     <input type="password" name="pwd" value="123">
5     <input type="submit">
6   </form>
7 </body>

js代碼:

1 app.post('/body', function (req, res, next) {
2   console.log('get請求參數 :',req.query);
3   console.log('post請求參數 :',req.body);
4 });

3.3 獲取url路徑(req.params)

1 app.get('/test/:urlname', function (req, res,next) {
2   console.log('url參數 :',req.params);
3   console.log('get請求參數 :',req.query);
4   console.log('post請求參數 :',req.body);
5 });

訪問:http://127.0.0.1:4000/test/1234

 

 


免責聲明!

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



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