博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Nodejs之express第三方核心模块的中间件——body-parser
阅读量:5837 次
发布时间:2019-06-18

本文共 2631 字,大约阅读时间需要 8 分钟。

Node中的核心模块分两类:一类是自带的核心模块,如http、tcp等,第二类是第三方核心模块,express就是与http对应的第三方核心模块,用于处理http请求。express在3.0版本中自带有很多中间件,但是在express 4.0以后,就将除static(静态文件处理)以外的其他中间件分离出来了;在4.0以后需要使用中间件时,就需要单独安装好相应的中间件以后调用,以下3.0与4.0中间件的中间件区别(3.0是内置中间件属性名,4.0是需要安装的中间件名称):

Express 3.0 Name

Express 4.0 Name

bodyParser

compress

cookieSession

logger

cookieParser

session

favicon

response-time

error-handler

method-override

timeout

vhost

csrf

 

*********************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)

以下是它的三种用法:

1、底层中间件用法:这将拦截和解析所有的请求;也即这种用法是全局的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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所有的请求进行拦截和解析。

2、特定路由下的中间件用法:这种用法是针对特定路由下的特定请求的,只有请求该路由时,中间件才会拦截和解析该请求;也即这种用法是局部的;也是最常用的一个方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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)的请求进行拦截和解析。

3、设置Content-Type 属性;用于修改和设定中间件解析的body类容类型。

// parse various different custom JSON types as JSONapp.use(bodyParser.json({ type: 'application/*+json' });// parse some custom thing into a Bufferapp.use(bodyParser.raw({ type: 'application/vnd.custom-type' })); // parse an HTML body into a string app.use(bodyParser.text({ type: 'text/html' }));

转载地址:http://xujcx.baihongyu.com/

你可能感兴趣的文章
转 通过phpize为php在不重新编译php情况下安装模块openssl
查看>>
html基础
查看>>
深入理解java虚拟机(三)--类文件结构
查看>>
Null value was assigned to a property of primitive type setter of
查看>>
UIRecorder 学习了解
查看>>
三元表达式,推导式,递归,匿名函数,内置函数
查看>>
zabbix3.4配置之邮件报警机制(通过zabbix自有的邮件机制)
查看>>
SQL server查看触发器是否被禁用
查看>>
jupyter notebook的安装与基本操作
查看>>
C#: using JsonReader avoid Deserialize Json to dynamic
查看>>
[C++基础]在构造函数内部调用构造函数
查看>>
跟随我在oracle学习php(8)
查看>>
FZU - 1688 Binary land
查看>>
Spring 3.1.0 Hibernate 3.0 Eclipse Spring WEB例子
查看>>
转换流,Properties 集合
查看>>
bootstrap列排序
查看>>
redis 常用操作
查看>>
如何用ABP框架快速完成项目(9) - 用ABP一个人快速完成项目(5) - 不要执着于设计模式和DDD理论,避免原教旨主义...
查看>>
用户交互
查看>>
【ubuntu 修改root密码】
查看>>