nodejs接收post請求參數

原文 http://www.javashuo.com/article/p-rtgjbxti-cd.htmlcss

 

nodejs接收post請求參數
1.1-瀏覽器發送post請求參數的方式
1.2-服務端接收post請求參數的方式html

post請求參數不直接在url路徑中拼接,而是放在請求體中發送給服務器node

請求三要素:請求行、請求頭、請求體
1.1-瀏覽器發送post請求參數的方式
post請求參數不能直接在url路徑中拼接,因此通常使用ajax請求來發送post請求參數
一般都是提交form表單數據使用post請求jquery

<script>ios

//瀏覽器中通常使用ajax來發送post請求
$('#form').on('sunmit', function (e) {
//禁用表單默認提交事件
e.preventDefault();
$.ajax({
url: 'heroAdd',
type: 'post',
dataType: 'json',
data: $(this).serialize(),
success: function (data) {
}
});
});
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
完整代碼ajax

<!DOCTYPE html>
<html lang="en">數據庫

<head>
<meta charset="UTF-8">
<title>Hero - Admin</title>
<!-- 導入jquery -->
<script src="/node_modules/jquery/dist/jquery.js"></script>
<!-- bootstrap佈局 -->
<link rel="stylesheet" href="/node_modules/bootstrap/dist/css/bootstrap.css">
<script src="/node_modules/bootstrap/dist/js/bootstrap.js"></script>
<style>
.hero-list img {
width: 50px;
}
</style>
</head>json

<body>
<header>
<div class="page-header container">
<h1>
<a href="/">王者榮耀</a>
<small>英雄管理器</small>
</h1>
</div>
</header>
<div class="container hero-list">
<form id="form">
<div class="form-group">
<label for="exampleInputEmail1">英雄名稱</label>
<input type="text" name="name" class="form-control" id="exampleInputEmail1" placeholder="請輸入英雄名稱">
</div>
<div class="form-group">
<label for="exampleInputPassword1">英雄性別</label>
<div class="radio">
<label>
<input type="radio" name="gender" id="optionsRadios1" value="男" checked>男
</label>
<label>
<input type="radio" name="gender" id="optionsRadios1" value="女" checked>女
</label>
</div>
</div>
<div class="form-group">
<label for="exampleInputFile">英雄圖片</label>
<!-- <input type="file" id="exampleInputFile"> -->
<p class="help-block">請上傳英雄圖片.</p>
</div>
<button type="submit" class="btn btn-success">點擊保存</button>
</form>
</div>
</body>bootstrap

<script>
//瀏覽器中通常使用ajax來發送post請求
$('#form').on('sunmit', function (e) {
//禁用表單默認提交事件
e.preventDefault();
$.ajax({
url: 'heroAdd',
type: 'post',
dataType: 'json',
data: $(this).serialize(),
success: function (data) {
}
});
});
</script>瀏覽器

</html>
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
1.2-服務端接收post請求參數的方式
與get請求不一樣的是,服務端接收post請求參數不是一次就能夠獲取的,一般須要屢次

通常post請求發送的參數數據要比get請求大得多
1.服務端接收表單數據流程

(1)若是表單數據量越多,則發送的次數越多,若是比較少,可能一次就發過來了
(2)接收表單數據的時候,須要經過監聽 req 對象的 data 事件來取數據
(3)每當收到一段表單提交過來的數據,req 的 data 事件就會被觸發一次,同時經過回調函數能夠拿到該 段 的數據
服務端須要本身添加數據流
(4)當接收表單提交的數據完畢以後,會執行req的 on 事件
2.服務端處理表單數據的邏輯流程

(1)對數據進行解碼(中文數據提交時會進行url編碼)
decodeURI(data)
(2)使用querystring對url進行反序列化(解析url將&和=拆分紅鍵值對),獲得一個對象
querystring是nodejs內置的一個專用於處理url的模塊,API只有四個,詳情見nodejs官方文檔
post請求參數不能使用url模塊解析,由於他不是一個url,而是一個請求體對象
(3)將數據插入到數據庫

//導入querystring模塊(解析post請求數據)
var querystring = require('querystring');

console.log(req.method);

//1.經過判斷url路徑和請求方式來判斷是不是表單提交
if (req.url === '/heroAdd' && req.method === 'POST') {
/**服務端接收post請求參數的流程
* (1)給req請求註冊接收數據data事件(該方法會執行屢次,須要咱們手動累加二進制數據)
* * 若是表單數據量越多,則發送的次數越多,若是比較少,可能一次就發過來了
* * 因此接收表單數據的時候,須要經過監聽 req 對象的 data 事件來取數據
* * 也就是說,每當收到一段表單提交過來的數據,req 的 data 事件就會被觸發一次,同時經過回調函數能夠拿到該 段 的數據
* (2)給req請求註冊完成接收數據end事件(全部數據接收完成會執行一次該方法)
*/
//建立空字符疊加數據片斷
var data = '';

//2.註冊data事件接收數據(每當收到一段表單提交的數據,該方法會執行一次)
req.on('data', function (chunk) {
// chunk 默認是一個二進制數據,和 data 拼接會自動 toString
data += chunk;
});

// 3.當接收表單提交的數據完畢以後,就能夠進一步處理了
//註冊end事件,全部數據接收完成會執行一次該方法
req.on('end', function () {

//(1).對url進行解碼(url會對中文進行編碼)
data = decodeURI(data);
console.log(data);

/**post請求參數不能使用url模塊解析,由於他不是一個url,而是一個請求體對象 */

//(2).使用querystring對url進行反序列化(解析url將&和=拆分紅鍵值對),獲得一個對象
//querystring是nodejs內置的一個專用於處理url的模塊,API只有四個,詳情見nodejs官方文檔
var dataObject = querystring.parse(data);
console.log(dataObject);
});
}
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
33
34
35
36
37
38
39
40
41
完整代碼

//1.導入http模塊
var http = require('http');
//導入文件模塊
var fs = require('fs');
//導入路徑模塊
var path = require('path');
//導入querystring模塊(解析post請求數據)
var querystring = require('querystring');

//2.建立服務器
var app = http.createServer();

//3.添加響應事件
app.on('request', function (req, res) {

console.log(req.method);

//1.經過判斷url路徑和請求方式來判斷是不是表單提交
if (req.url === '/heroAdd' && req.method === 'POST') {
/**服務端接收post請求參數的流程
* (1)給req請求註冊接收數據data事件(該方法會執行屢次,須要咱們手動累加二進制數據)
* * 若是表單數據量越多,則發送的次數越多,若是比較少,可能一次就發過來了
* * 因此接收表單數據的時候,須要經過監聽 req 對象的 data 事件來取數據
* * 也就是說,每當收到一段表單提交過來的數據,req 的 data 事件就會被觸發一次,同時經過回調函數能夠拿到該 段 的數據
* (2)給req請求註冊完成接收數據end事件(全部數據接收完成會執行一次該方法)
*/
//建立空字符疊加數據片斷
var data = '';

//2.註冊data事件接收數據(每當收到一段表單提交的數據,該方法會執行一次)
req.on('data', function (chunk) {
// chunk 默認是一個二進制數據,和 data 拼接會自動 toString
data += chunk;
});

// 3.當接收表單提交的數據完畢以後,就能夠進一步處理了
//註冊end事件,全部數據接收完成會執行一次該方法
req.on('end', function () {

//(1).對url進行解碼(url會對中文進行編碼)
data = decodeURI(data);
console.log(data);

/**post請求參數不能使用url模塊解析,由於他不是一個url,而是一個請求體對象 */

//(2).使用querystring對url進行反序列化(解析url將&和=拆分紅鍵值對),獲得一個對象
//querystring是nodejs內置的一個專用於處理url的模塊,API只有四個,詳情見nodejs官方文檔
var dataObject = querystring.parse(data);
console.log(dataObject);
});
}

if (req.url === '/heroAdd' && req.method === 'POST') { fs.readFile('./heroAdd.html', function (err, data) { if (err) { throw err; } res.end(data); }); } else if (req.url.indexOf('/node_modules') === 0) { fs.readFile(__dirname + req.url, function (err, data) { if (err) { throw err; } else { res.end(data); } }); } else { res.end('請求路徑: ' + req.url); }});

相關文章
相關標籤/搜索