Nodejs之express第三方核心模塊的中間件——body-parser

 

 

Node中的核心模塊分兩類:一類是自帶的核心模塊,如http、tcp等,第二類是第三方核心模塊,express就是與http對應的第三方核心模塊,用於處理http請求。express在3.0版本中自帶有不少中間件,可是在express 4.0之後,就將除static(靜態文件處理)之外的其餘中間件分離出來了;在4.0之後須要使用中間件時,就須要單獨安裝好相應的中間件之後調用,如下3.0與4.0中間件的中間件區別(3.0是內置中間件屬性名,4.0是須要安裝的中間件名稱):javascript

Express 3.0 Namehtml

Express 4.0 Namejava

bodyParsernode

body-parsergit

compressgithub

compressionexpress

cookieSessionjson

cookie-sessionapi

loggercookie

morgan

cookieParser

cookie-parser

session

express-session

favicon

static-favicon

response-time

response-time

error-handler

errorhandler

method-override

method-override

timeout

connect-timeout

vhost

vhost

csrf

csurf

 

*********************body-parser****************************

我是在學習nodejs時候,對着書本的例子時,使用bodyParser這個中間件,在終端運行出問題,報錯大概意思也是express4.0中沒有bodyParser這個內置中間件了,還給了body-parser的GitHub源代碼地址:https://github.com/expressjs/body-parser.

通過看源代碼下面的說明知道了body-parser的三種用法:

在講用法之間,咱們須要弄清楚下面四個不一樣的處理方法:這四個處理方法分別對body的內容採用不一樣的處理方法;分別是處理json數據、Buffer流數據、文本數據、UTF-8的編碼的數據。

bodyParser.json(options)、bodyParser.raw(options)、bodyParser.text(options)、bodyParser.urlencoded(options)

如下是它的三種用法:

一、底層中間件用法:這將攔截和解析全部的請求;也即這種用法是全局的。

var express = require('express')
var bodyParser = require('body-parser')

var app = express()

// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))

// parse application/json
app.use(bodyParser.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))
})

   express的use方法調用body-parser實例;且use方法沒有設置路由路徑;這樣的body-parser實例就會對該app全部的請求進行攔截和解析。

二、特定路由下的中間件用法:這種用法是針對特定路由下的特定請求的,只有請求該路由時,中間件纔會攔截和解析該請求;也即這種用法是局部的;也是最經常使用的一個方式

var express = require('express')
var bodyParser = require('body-parser')

var app = express()

// create application/json parser
var jsonParser = bodyParser.json()

// create application/x-www-form-urlencoded parser
var urlencodedParser = bodyParser.urlencoded({ extended: false })

// POST /login gets urlencoded bodies
app.post('/login', urlencodedParser, function (req, res) {
  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) {
  if (!req.body) return res.sendStatus(400)
  // create user in req.body
})

  express的post(或者get)方法調用body-parser實例;且該方法有設置路由路徑;這樣的body-parser實例就會對該post(或者get)的請求進行攔截和解析。

三、設置Content-Type 屬性;用於修改和設定中間件解析的body類容類型。

// 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' }));
相關文章
相關標籤/搜索