Express全系列教程之(四):獲取Post參數的兩種方式

1、關於POST請求

post方法做爲http請求很重要的一部分,幾乎全部的網站都有用到它,與get不一樣,post請求更像是在服務器上作修改操做,它通常用於數據資源的更新。
相比於get請求,post所請求的數據會更加安全。上一章中咱們發現get請求會在地址欄顯示輸入的用戶名和密碼(有中文時會轉化爲BASE64加密),而post請求則會將數據放入http包的包體中,這使得別人沒法直接看到用戶名和密碼!javascript

 

2、Express如何設置POST請求

1.咱們的知道,首先咱們得知道在form表單進行post請求,enctype屬性通常設置爲「application/x-www-form-urlencoded」,若是設置成multipart/form-data,則多用於文件上傳,以下:html

<form action="#" method="post" enctype="application/x-www-form-urlencoded">
</form>

  以後,咱們可使用npm提供的body-parser或者connect-multiparty來獲取post數據。我也會把兩種方式都進行演示:java

(1)、body-parser

Express中默認都使用body-parser做爲請求體解析post數據,這個模塊也能解析:JSON、Raw、文本、URL-encoded格式的請求體。
首先在項目目錄安裝body-parser:express

cnpm install body-parser --save

  在項目app.js中,引用和設置該模塊:npm

const bodyParser=require("body-parser");

// 解析以 application/json 和 application/x-www-form-urlencoded 提交的數據
var jsonParser = bodyParser.json();
var urlencodedParser = bodyParser.urlencoded({ extended: false });

  

bodyParser.json()很明顯是將json做爲消息主題,再且常見的語言和瀏覽器大都支持json規範,使得json處理起來不會趕上兼容性問題。
application/x-www-form-urlencoded:
若是form表單不設置enctype屬性,那麼他默認就會是這種。
以後獲取數據:json

    app.post("/",urlencodedParser,function(req,res){
    	res.send(req.body);
    });

  

在中間添加urlencodedParser,請求是依然使用req.body獲取數據。
下面是一個完整的實例:
index.html:瀏覽器

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<form action="http://localhost:8080/" method="post" enctype="application/x-www-form-urlencoded">
			用戶:
			<input type="text" name="user" id="user" placeholder="用戶名"><br>
			密碼:
			<input type="password" name="password" id="password" placeholder="密碼"/><br>
			<input type="submit" value="提交"/>
		</form>
	</body>
</html>

  app.js:安全

const express=require("express");
const bodyParser=require("body-parser");

var app=express();

// 解析application/json數據
var jsonParser = bodyParser.json();
// 解析application/x-www-form-urlencoded數據
var urlencodedParser = bodyParser.urlencoded({ extended: false });

app.post('/',urlencodedParser,function(req,res){
	res.send(req.body);
});

app.listen(8080);

  (2)、connect-multiparty

雖然connect-multiparty多用於文件上傳,但也能夠訪問到post請求的數據,先安裝服務器

cnpm install connect-multiparty --save

  再引入和構建函數:app

const multipart = require('connect-multiparty');
var multipartMiddleware = multipart();
```
一樣咱們也採用req.body來獲取參數:

```
app.post('/',multipartMiddleware,function(req,res){
	res.send(req.body);
});

  完整的:

const express=require("express");
const multipart = require('connect-multiparty');
var multipartMiddleware = multipart();

var app=express();

app.post('/',multipartMiddleware,function(req,res){
	res.send(req.body);
});

app.listen(8080);

  相比於body-parser,代碼量彷佛更少一些,但我仍是建議使用body-parser,根據官方說法,他會在服務器上建立臨時文件,而且永遠不會去清理它們,這會至關兩會系統資源,因此不到萬不得已請不要去使用它。

總結

post數據在網頁開發時常常使用,請務必掌握它,只有這樣網頁的交互設計纔可以作到遊刃有餘,今天就到這裏,也但願你們之後多多支持。

相關文章
相關標籤/搜索