post方法做爲http請求很重要的一部分,幾乎全部的網站都有用到它,與get不一樣,post請求更像是在服務器上作修改操做,它通常用於數據資源的更新。
相比於get請求,post所請求的數據會更加安全。上一章中咱們發現get請求會在地址欄顯示輸入的用戶名和密碼(有中文時會轉化爲BASE64加密),而post請求則會將數據放入http包的包體中,這使得別人沒法直接看到用戶名和密碼!javascript
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
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);
雖然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數據在網頁開發時常常使用,請務必掌握它,只有這樣網頁的交互設計纔可以作到遊刃有餘,今天就到這裏,也但願你們之後多多支持。