1. 程式人生 > >express外掛之body-parser

express外掛之body-parser

body-parser中介軟體:
  這是node.js的訊息體解析中介軟體,但是這個中介軟體不會解析multipart body,由於這種訊息體很複雜而且也很大。這種multipart的訊息體可以用multer,formidable等來完成(mulpipart表示表單的enctype屬性)
  這個模組可以提供以下的解析器:
    JSON body parser
Raw body parser
Text body parser
URL-encoded form body parser
  你還可能對一下的訊息體解析外掛比較有興趣:
    body
   co-body
var bodyParser = require('body-parser')
所有中介軟體都會把解析好的訊息體封裝到req.body上面,如果沒有訊息體解析那麼返回的就是一個空物件{}。當然這個模組也可能丟擲異常
bodyParser.json(options)
   返回一個只解析json的中介軟體,可以支援任何unicode編碼的訊息體,同時也支援gzip和deflate編碼。最後儲存的資料都放在req.body物件上
options引數包含以下內容:
   inflate:預設為true。
    limit:訊息體的最大值,數字表示最大位元。也可以是string,預設值'100kb'
    reviver:這個選項被直接傳入JSON.parse函式,並作為第二個引數。
    strict:如果設定為true,那麼只會接受array或者object。false表示接受任何JSON.parse接受的引數
    type:指定這個中介軟體會解析的媒體型別。可以是一個函式也可以是一個字串。如果是一個string那麼會被傳入type-is這個庫,並同時可以為
         副檔名如json,或者mime型別(application/json),或者一個包含萬用字元的mime型別(*/*,*/json)。如果是一個函式,那麼這個函式被呼叫,傳入引數
         為fn(req),而且這個req是返回的解析過的真實值。預設為application/json(這裡是json方法)
    verify:如果提供了,那麼呼叫時為verify(req,res,buf,encoding),buf表示一個Buffer物件,其中包含的是初始的訊息體,也就是沒有被解析過的訊息體,encoding
           表示這個請求的編碼型別,如果丟擲異常那麼停止解析
bodyParser.raw(options)

  返回一箇中間件,這個中介軟體吧所有的訊息解析為一個Buffer,而且支援自動的gzip和defalte編碼。解析後,這個Buffer包含的是訊息體。
options引數包含以下內容:
inflate:和上面一致
limit:和上面一致

type:如果傳入string那麼這個string被傳入到type-is庫,這個string副檔名可以是bin,或者mime型別是application/octet-stream,也可以是萬用字元(*/*,application/*)。除了預設的返回值為application/octet-stream以外和上面是一致的

verify:和上面一致
bodyParser.text(options)


返回一箇中間件,這個中介軟體可以把訊息體解析為一個字串,而且支援自動的gzip和deflate編碼。解析的結果在req.body中
options引數包含以下內容:
defaultCharset:設定一個預設的編碼對文字內容進行編碼,如果在content-type中沒有指定就用這個預設的編碼
inflate:和上面一致
limit:和上面一致
type:如果是一個string,那麼被傳入到type-is的庫中,這個string可以是副檔名為txt,或者mime型別為text/plain,或者含有萬用字元的型別。
     預設為text/plain
verify:和上面一致

bodyParser.urlencoded(options)
 返回一個只解析urlencoded訊息體的中介軟體,只接受utf-8對訊息體進行編碼,同時支援自動的gzip/deflate編碼解析過的訊息放在req.body物件中。這個物件包含的鍵值對,同時值可以是一個string或者一個數組(當extended為false的時候)。也可以是任何型別(當extended設定為true)
options引數包含以下內容:
extended:如果設定為false,那麼對URL-encoded的資料的解析採用querystring庫,如果設定為true那麼採用qs庫。 extended符號允許富物件和陣列被編碼為URL-encoded的型別,也可以是一個JSON編碼的資料。預設為true但是還是要仔細研究一下qs和querystring的區別,以便正確的選擇
inflate:和上面一致
limit:和上面一致
parameterLimit:指定在URL-encoded的資料中最大的引數的數量,如果引數多於這個數量那麼返回給客戶端a413,。預設值為1000
type:如果這個引數是string那麼會傳遞給type-is庫去判斷,副檔名可以是urlencoded,或者mime型別為 application/x-www-form-urlencoded
      或者mime型別為*/x-www-form-urlencoded。預設為application/x-www-form-urlencoded
verify:和上面一致

例子:

var express = require('express')
var bodyParser = require('body-parser')
var app = express()
// parse application/x-www-form-urlencoded 
app.use(bodyParser.urlencoded({ extended: false }))//extended為false表示使用querystring來解析資料,這是URL-encoded解析器
// parse application/json 
app.use(bodyParser.json())//新增json解析器
app.use(function (req, res) {
  res.setHeader('Content-Type', 'text/plain')
  res.write('you posted:\n')
  res.end(JSON.stringify(req.body, null, 2))
})
這個例子演示了新增一個原生的JSON和URL-encoded解析器去解析訊息體。
var express = require('express')
var bodyParser = require('body-parser')
var app = express()
// create application/json parser 
var jsonParser = bodyParser.json()//獲取JSON解析器中介軟體
// create application/x-www-form-urlencoded parser 
var urlencodedParser = bodyParser.urlencoded({ extended: false })//url-encoded解析器
// POST /login gets urlencoded bodies 
app.post('/login', urlencodedParser, function (req, res) {//註冊URL解析器
  if (!req.body) return res.sendStatus(400)
  res.send('welcome, ' + req.body.username)
})
// POST /api/users gets JSON bodies 
app.post('/api/users', jsonParser, function (req, res) {//使用json中介軟體獲取json資料
  if (!req.body) return res.sendStatus(400)
  // create user in req.body 
})
這個例子演示瞭如何在需要的路由中新增一個body-parser,這也是express最推薦的使用body-parser的方式
// parse various different custom JSON types as JSON 
app.use(bodyParser.json({ type: 'application/*+json' }))
// parse some custom thing into a Buffer 
app.use(bodyParser.raw({ type: 'application/vnd.custom-type' }))
// parse an HTML body into a string 
app.use(bodyParser.text({ type: 'text/html' }))
所有的中介軟體可以指定對訊息進行解析的編碼方式
qs對字串的處理和multer可以對型別是multipart/form-data的表單進行處理

相關推薦

express外掛body-parser

body-parser中介軟體:   這是node.js的訊息體解析中介軟體,但是這個中介軟體不會解析multipart body,由於這種訊息體很複雜而且也很大。這種multipart的訊息體可以用multer,formidable等來完成(mulpipart表示表單的e

Nodejs基礎body-parser

body-parser 原理:用req.on和querystring處理請求資料 const parser = require('body-parser')// 引入 server.use(p

node的express框架,核心第三方模塊body-parser 獲取我們所有post請求傳過來數據

賦值 傳遞 xtend 接收 返回 .json oca data host - 安裝 body-parser模塊- npm install body-parser -S- 調用- let bodyParser=require(‘body-parser‘);- 設置中間件-

[轉] Nodejs 進階:Express 常用中間件 body-parser 實現解析

tree define pan iconv 不同 erro unzip body message 寫在前面 body-parser是非常常用的一個express中間件,作用是對post請求的請求體進行解析。使用非常簡單,以下兩行代碼已經覆蓋了大部分的使用場景。 app.

node.js初使用使用express外掛快速搭建登入註冊

首先,介紹些express,express是基於node.js平臺快速,開放,極簡的web開發框架,express 便於我們快速的開發node api介面 得保證安裝了node.js 下載好以後,新建server.js檔案 //引入模組 const express = require('

react+node.js中body-parser外掛傳送post請求,拿不到req.body問題

只需要把body-parser放在user.js檔案前面引入 sever.js const express = require('express') const bodyParser = require('body-parser') const use

Nodejs進階:Express常用中介軟體body-parser實現解析

原文連結 body-parser是非常常用的一個express中介軟體,作用是對post請求的請求體進行解析。使用非常簡單,以下兩行程式碼已經覆蓋了大部分的使用場景。 app.use(bodyParser.json()); app.use(bodyParser.urle

express body-parser

body-parser 模組 功能: bodyParser用於解析客戶端請求的body中的內容,內部使用JSON編碼處理,url編碼處理以及對於檔案的上傳處理. 另外bodyParse可以接受客戶端a

express body-parser 小書

簡介 cookie-parser是Express最常使用的中介軟體,實際上雖然他名義上是一箇中間件但是實際上已經儼然成為了Express的一個不可或缺的部分. 在Express4的文件中,操作Cookie的部分就一個方法和一個屬性.但是實際上如果你不使用cookie

程序外掛修改名稱

技術 img png idt chan http alt die 動態 1.建立運行應用程序如PicPick 2.使用工具OllyDbg v1.0窗口工具捕獲該窗口的類名和標題如下圖 3.根據獲取的類名TfrmMDIEditor和標題PPP編寫c代碼如下 #inclu

夢幻成仙,誅滅外掛——《夢幻誅仙手遊》的阻擊外掛

超過 ext 客戶端 left ron 相加 功能 出現 成本 隨著智能手機的全面普及和市場泛娛樂化,移動遊戲行業發展迅猛,無論是市場收入還是用戶規模,手遊在遊戲市場上已經占據了半壁江山。如此火熱的市場吸引了大量外掛、輔助工作室等非法盈利團隊,嚴重影響了遊戲的收益、平衡,縮

nodejs 使用 body-parser 獲取網頁內容

parse nodejs 網頁 url end func body parser .post var bodyParser = require(‘body-parser‘); var urlencodedParser = bodyParser.urlencoded({

pythonbody標簽中的相關標簽2(14)

word 人物 ext 滾動視圖 png com 表單元素 method check 今日主要內容: 列表標簽 <ul>、<ol>、<dl> 表格標簽 <table> 表單標簽 <fom> 一、列表

瀏覽器外掛ActiveX開發(四)----web頁面呼叫ActiveX

轉自:http://www.cnblogs.com/qguohog/archive/2013/01/25/2876828.html https://blog.csdn.net/zengraoli/article/details/12078757?utm_source=blogxgwz3 &n

nodejs(十一)獲得post請求體 body-parser

當請求引數在url中的時候,我們可以用request.query獲得請求體,當請求內容不在url中時,我們需要藉助一個body-parser依賴來獲取請求體 var express = require('express') var app = express() var body

本地安裝谷歌的外掛 CRX格式外掛離線安裝

方法一 :開發模式安裝 [親測] 1.把下載後的.crx副檔名的離線Chrome外掛的副檔名改成.zip或者.rar (如何檢視Chrome外掛的副檔名 資料夾>工具>資料夾>檢視>隱藏已知檔案型別的副檔名),如圖所示: 2.右鍵點選該檔案,並使用壓縮軟體(

Jenkins外掛 Docker-Plugin 將slave執行在docker容器中

Jenkins外掛名稱 Docker plugin This plugin integrates Jenkins with Docker This plugin allows slaves to be dynamically provisioned using Docker. 外掛文

layui的laydate外掛坑——渲染問題

最近專案使用了laydate.js這個時間外掛。自從這個外掛升級後確實還挺好用的,在選擇時間上操作非常簡單: laydate.render({ elem: '#test' //或 elem: document.getElementById('test')、elem: lay('#test') 等

4.body-parser中介軟體的使用專門處理前端的post請求,同理get請求在本例不適用,內含如何自定義中介軟體middleware

使用express框架可以結合中介軟體body-parser方便處理前端傳送過來的資料。(class10) 第一部分: 1.新建目錄後,開啟cmd---進入當前目錄---cnpm install express express-static body-parser   

MVPHelper外掛混淆報錯 ClassCastException: Object cannot be case to xxx

之前在android stduio裡用mvphelper自動生成,最近要發包,加了混淆 打了個release包開啟直接崩了,檢視日誌顯示是獲取的model為null。 以為是泛型的問題,但是加了過濾泛型 -keepattributes Signature 最後想了很多都是不知道為