亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

淺談Express.js解析Post數據類型的正確姿勢

2024-05-06 16:51:36
字體:
來源:轉載
供稿:網友

一、概念介紹

1、POST請求:HTTP/1.1 協議規定的 HTTP 請求方法有 OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT這幾種。其中 POST 一般用來向服務端提交數據。

2、 Content-Type : 是指 http/https 發送信息至服務器時的內容編碼類型, Content-Type 用于表明發送數據流的類型,服務器根據編碼類型使用特定的解析方式,獲取數據流中的數據。四種常見的 POST 請求的 Content-Type 數據類型:

  • application/x-www-form-urlencoded
  • multipart/form-data
  • application/json
  • text/xml

3、 Express.js : Express 是一個保持最小規模的靈活的 Node.js Web 應用程序開發框架,為 Web 和移動應用程序提供一組強大的功能。

本文我們主要介紹 Post 請求的 4 種 Content-Type 數據類型,以及如何使用 Express 來對每種 Content-Type類型進行解析。已經將完整的代碼實例上傳到 github,github 地址為: https://github.com/fengshi123/request_example,歡迎 star 。

二、四種POST請求的Content-Type數據類型解析

1、application/x-www-form-unlencoded

最常見的 POST 提交數據的方式,瀏覽器的原生 form 表單,如果不設置 enctype 屬性,那么最終就會默認以 application/x-www-form-urlencoded 方式提交數據。

1.1、前端請求代碼

var reqParam = "name=jack";xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');xhr.send(reqParam);

1.2、服務端解析代碼

app.post('/urlencoded', bodyParser.urlencoded({extend:true}), function (req, res) {   var result = {   name: req.body.name,       sex: '男',       age: 15   };   res.send(result);});

1.3、瀏覽器請求 / 響應截圖

請求:

Express.js,Post,數據類型

響應:

Express.js,Post,數據類型

2、multipart/form-data

使用表單上傳文件時,必須指定表單的 enctype 屬性值為 multipart/form-data . 請求體被分割成多部分,每部分使用 --boundary 分割開始,緊接著內容描述信息,最后是字段具體內容(文本或二進制);如果傳輸的是文件,還要包含文件名和文件類型信息;

2.1、前端請求代碼

var reqParam = new FormData(document.form2);xhr.send(reqParam);

2.2、服務端解析代碼

express 提供了兩種插件 formidable 和 multiparty 來處理數據類型為 multipart/form-data 的情況,以下我們分別用兩個插件進行處理;

2.2.1、formidable 插件

(1)安裝插件

npm install formidable --save

(2)服務端解析處理

app.post('/formData1', function (req, res) {    var form = new formidable.IncomingForm();    form.uploadDir = "upload/";    form.parse(req, function (err, fields, files) {       var obj = {};       Object.keys(fields).forEach(function (name) {      obj[name] = fields[name];       });       Object.keys(files).forEach(function (name) {           if (files[name] && files[name].name) {               obj[name] = files[name];               fs.renameSync(files[name].path, form.uploadDir + files[name].name);         }       });      res.send(obj);    });});

2.2.2、multiparty 插件

(1)安裝插件

npm install multiparty--save

(2)服務端解析處理

app.post('/formData2', function (req, res) {   // 解析一個文件上傳  var form = new multiparty.Form();  //設置編輯  form.encoding = 'utf-8';  //設置文件存儲路徑  form.uploadDir = "upload/";   //設置單文件大小限制  form.maxFilesSize = 2000 * 1024 * 1024;  form.parse(req, function (err, fields, files) {       var obj = {};       Object.keys(fields).forEach(function (name) {           obj[name] = fields[name];       });       Object.keys(files).forEach(function (name) {           if (files[name] && files[name][0] && files[name][0].originalFilename) {               obj[name] = files[name];               fs.renameSync(files[name][0].path, form.uploadDir + files[name][0].originalFilename);      }       });       res.send(obj);    });});

2.3、瀏覽器請求 / 響應截圖

請求:

Express.js,Post,數據類型

響應:

Express.js,Post,數據類型

3、application/json

application/json 這個 Content-Type 作為響應頭,用來告訴服務端消息主體是序列化后的 JSON 字符串。由于 JSON 規范的流行,除了低版本 IE 之外的各大瀏覽器都原生支持 JSON.stringify ,服務端語言也都有處理 JSON 的函數,使用 JSON 不會遇上什么麻煩。

3.1、前端請求代碼

var reqParam = {     name: 'jack'};xhr.setRequestHeader('Content-type', 'application/json');xhr.send(JSON.stringify(reqParam));

3.2、服務端解析代碼

app.post('/applicationJson', bodyParser.json(), function (req, res) {  var result = {      name: req.body.name,      sex: '男',      age: 15   };    res.send(result);});

3.3、瀏覽器請求 / 響應截圖

請求:

Express.js,Post,數據類型

響應:

Express.js,Post,數據類型

4、text/xml

它是一種使用 HTTP 作為傳輸協議, XML 作為編碼方式的遠程調用規范,它的使用也很廣泛,能很好的支持已有的 XML-RPC 服務。不過, XML 結構還是過于臃腫,一般場景用 JSON 會更靈活方便。

4.1、前端請求代碼

var text = '<?xml version="1.0"?><methodCall><methodName>examples.getStateName</methodName>' +  '<params><param><value><i4>41</i4></value></param></params></methodCall>';xhr.setRequestHeader('Content-type', 'text/xml');xhr.send(text);

4.2、服務端解析代碼

app.post('/textXml', bodyParser.urlencoded({extend:true}), function (req, res) {    var result = '';   req.on('data', function (chunk) {      result += chunk;    });    req.on('end', function () {      res.send(result);    });});

4.3、瀏覽器請求 / 響應截圖

請求:

Express.js,Post,數據類型

響應:

Express.js,Post,數據類型

三、踩坑匯總

1、對于跨域請求,當 contentType 改為 application/json ,將觸發瀏覽器發送一個預檢 OPTIONS 請求到服務器,再發送正常的 post 請求;

2、使用 new FormData() ,然后設置 Content-type 為 application/x-www-form-urlencoded 或者 multipart/form-data 會導致后端無法正常解析,解決方法:就是不進行頭部設置, Content-type 會默認 為 multipart/form-data ,服務端正常解析;

3、 contentType 設置為 application/x-www-form-urlencoded 時,傳給后端的請求參數為 JSON 字符串, chrome 調試框查看發送的請求參數多了冒號,如下所示:

Express.js,Post,數據類型

這是因為 application/x-www-form-urlencoded 它將被解析成鍵值對展示,但是字符串進去是沒有改變的,但是展示的時候能看見。解決方法:如果為 JSON 字符串,則設置數據類型為 application/json ;

四、總結

本文我們主要介紹 Post 請求的 4 種 Content-Type 數據類型,以及如何使用 Express 來對每種 Content-Type類型進行解析。已經將完整的代碼實例上傳到 github , github 地址為:https://github.com/fengshi123/request_example,歡迎 star 。 demo 截圖如下所示:

Express.js,Post,數據類型

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久精品久久精品亚洲人| 国产网站欧美日韩免费精品在线观看| 国产精品一区专区欧美日韩| 91在线看www| 国产精品久久久久久久久久久久久| 性色av一区二区三区红粉影视| 久久视频中文字幕| 中文字幕一区二区三区电影| 久久精品一偷一偷国产| 久久久99免费视频| 亚洲国产日韩欧美在线图片| 国产欧美日韩91| 亚洲激情中文字幕| 亚洲视频欧洲视频| 亚洲图片制服诱惑| www.亚洲成人| 亚洲精品久久久久国产| 国产mv免费观看入口亚洲| 亚洲第一视频在线观看| 国产精品入口免费视| 欧美剧在线观看| 亚洲国产精品小视频| xxxxx91麻豆| 97久久精品人搡人人玩| 亚洲成人性视频| 国产精品成人av性教育| 日韩美女在线观看| 久久久久国产一区二区三区| 狠狠久久亚洲欧美专区| 欧美精品一区二区免费| 国产日韩欧美电影在线观看| 亚洲精品国产suv| 亚洲国模精品私拍| 久久久久久久一区二区三区| 久久久亚洲天堂| 国产成人久久久精品一区| 国自产精品手机在线观看视频| 国产精品久久视频| 国产亚洲精品一区二555| 国内精品国产三级国产在线专| 成人性生交大片免费看小说| 精品自拍视频在线观看| 欧美在线视频一区二区| 国产男人精品视频| 欧美视频免费在线| 国产精品免费久久久久久| 亚洲精品免费在线视频| 国产欧美精品一区二区三区-老狼| 91九色视频导航| 国产精品露脸自拍| 国产精品第七影院| 欧美日韩免费在线| 久久免费视频网站| 国产欧美欧洲在线观看| 久久精品国产成人精品| 国产视频精品va久久久久久| 亚洲欧美日韩久久久久久| 国产成人精品电影久久久| 欧美精品videofree1080p| 亚洲视频999| 91免费综合在线| 欧美一级大片在线观看| 日韩中文字幕亚洲| 亚洲精品理论电影| 在线播放日韩专区| 国内精品小视频| 国产精品久久久久久久久粉嫩av| 亚洲人成啪啪网站| 国产精品一二三视频| 久久久综合免费视频| 久久精品美女视频网站| 亚洲综合日韩在线| 精品国产乱码久久久久久婷婷| 中文字幕免费精品一区| 中日韩美女免费视频网址在线观看| 久久久久久91香蕉国产| 在线免费看av不卡| 欧美国产日韩中文字幕在线| 国产精品久久中文| 亚洲美女在线看| 色黄久久久久久| 一本一本久久a久久精品综合小说| 久久久国产精品一区| 亚洲欧洲中文天堂| 国产在线拍揄自揄视频不卡99| 黑人精品xxx一区一二区| 国产精品吹潮在线观看| 亚洲免费人成在线视频观看| 日韩欧美在线免费观看| 午夜精品福利电影| 亚洲综合在线做性| 日韩最新中文字幕电影免费看| 亚洲r级在线观看| 亚洲国语精品自产拍在线观看| 欧美大肥婆大肥bbbbb| 亚洲色图50p| 日韩电影在线观看永久视频免费网站| 成人羞羞国产免费| 91精品美女在线| 亚洲自拍小视频| 日韩a**站在线观看| 欧美极品在线播放| 亚洲精品自拍偷拍| 日韩成人在线视频| 性欧美在线看片a免费观看| 欧美第一淫aaasss性| 午夜精品蜜臀一区二区三区免费| www.亚洲免费视频| 久久久久国产精品www| 久久精品成人动漫| 最近2019好看的中文字幕免费| 8x拔播拔播x8国产精品| 国产一区二区三区视频| 国产精品久久久久久av福利软件| 91精品国产色综合久久不卡98口| 欧美国产日本高清在线| 久久99精品国产99久久6尤物| 最近2019年手机中文字幕| 欧美日韩国产限制| 一区二区三区视频在线| 日韩av影视综合网| 国产精品久久久久久久美男| 欧美精品18videos性欧| 日韩电影免费观看中文字幕| 最近2019年中文视频免费在线观看| 日韩国产精品视频| 亚洲综合日韩中文字幕v在线| 欧美大学生性色视频| 成人妇女淫片aaaa视频| 日韩av电影院| 色一区av在线| 亚洲欧美日韩视频一区| 国产成人中文字幕| 日本成人激情视频| 欧美日韩爱爱视频| 97在线视频免费看| 亚洲国内精品视频| 欧美一级片免费在线| 亚洲韩国欧洲国产日产av| 欧美中文在线视频| 亚洲va久久久噜噜噜| 性欧美xxxx视频在线观看| 欧美日韩一区二区三区在线免费观看| 91高清视频在线免费观看| 亚洲激情小视频| 国产亚洲精品久久久| 九九热在线精品视频| 在线亚洲国产精品网| 久久成人人人人精品欧| 精品视频中文字幕| 欧美裸身视频免费观看| 欧美日韩午夜视频在线观看| 欧亚精品中文字幕| 91国语精品自产拍在线观看性色| 成人黄色网免费| 欧美日韩在线视频观看| 日韩精品电影网| 三级精品视频久久久久| 久久久精品免费视频| 亚洲精品国产精品国产自| 国产成人精品一区二区三区| 日韩精品在线观看一区二区| 亚洲午夜国产成人av电影男同| 神马久久久久久|