node.js中express中间件body-parser的介绍与用法详解


Posted in Javascript onMay 23, 2017

前言

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 body-parser
compress compression
cookieSession cookie-session
logger 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)

以下是它的三种用法:

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

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

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 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' }));

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
JavaScript 学习笔记(四)
Dec 31 Javascript
JS网页在线获取鼠标坐标值的方法
Feb 28 Javascript
jquery实现的省市区三级联动
Apr 02 Javascript
JavaScript的Polymer框架中dom-repeat与VM的相关操作
Jul 29 Javascript
JS自定义选项卡函数及用法实例分析
Sep 02 Javascript
AngularJS入门教程之链接与图片模板详解
Aug 19 Javascript
Vue.JS入门教程之处理表单
Dec 01 Javascript
jQuery插件FusionWidgets实现的AngularGauge图效果示例【附demo源码】
Mar 23 jQuery
详解Angular中的自定义服务Service、Provider以及Factory
Apr 22 Javascript
微信小程序实现图片压缩功能
Jan 26 Javascript
js+SVG实现动态时钟效果
Jul 14 Javascript
vue-cli安装使用流程步骤详解
Nov 08 Javascript
微信小程序request出现400的问题解决办法
May 23 #Javascript
Bootstrap响应式表格详解
May 23 #Javascript
Node.js 实现简单的接口服务器的实例代码
May 23 #Javascript
用angular实现多选按钮的全选与反选实例代码
May 23 #Javascript
详解vue嵌套路由-params传递参数
May 23 #Javascript
详解vue嵌套路由-query传递参数
May 23 #Javascript
vue-router 中router-view不能渲染的解决方法
May 23 #Javascript
You might like
php生成txt文件标题及内容的方法
2014/01/16 PHP
基于OpenCart 开发支付宝,财付通,微信支付参数错误问题
2015/10/01 PHP
PHP的Yii框架中移除组件所绑定的行为的方法
2016/03/18 PHP
PHP调用接口用post方法传送json数据的实例
2018/05/31 PHP
在 Laravel 中动态隐藏 API 字段的方法
2019/10/25 PHP
js调用webservice中的方法实现思路及代码
2013/02/25 Javascript
javascript简单实现表格行间隔显示颜色并高亮显示
2013/11/29 Javascript
Eclipse配置Javascript开发环境图文教程
2015/01/29 Javascript
jQuery设置和移除文本框默认值的方法
2015/03/09 Javascript
jquery 插件实现瀑布流图片展示实例
2015/04/03 Javascript
详解JavaScript对W3C DOM模版的支持情况
2015/06/16 Javascript
js实现按钮控制带有停顿效果的图片滚动
2016/08/30 Javascript
一个例子轻松学会Vue.js
2017/01/02 Javascript
微信小程序表单验证错误提示效果
2017/05/19 Javascript
详解使用React进行组件库开发
2018/02/06 Javascript
浅谈Webpack核心模块tapable解析
2018/09/11 Javascript
关于vue-cli 3配置打包优化要点(推荐)
2019/04/22 Javascript
微信小程序获取用户信息及手机号(后端TP5.0)
2019/09/12 Javascript
vue 解决form表单提交但不跳转页面的问题
2019/10/30 Javascript
Electron 打包问题:electron-builder 下载各种依赖出错(推荐)
2020/07/09 Javascript
[03:49]2016完美“圣”典风云人物:AMS专访
2016/12/06 DOTA
Python实现简单HTML表格解析的方法
2015/06/15 Python
python实现音乐播放器 python实现花框音乐盒子
2020/02/25 Python
python实现从ftp上下载文件的实例方法
2020/07/19 Python
python 用opencv实现霍夫线变换
2020/11/27 Python
Python爬虫教程之利用正则表达式匹配网页内容
2020/12/08 Python
英国著名的小众美容品牌网站:Alyaka
2017/08/08 全球购物
老师自我鉴定范文
2013/12/25 职场文书
付款委托书范本
2014/04/04 职场文书
老公给老婆的保证书
2014/04/28 职场文书
法院答辩状格式
2015/05/22 职场文书
原告离婚代理词
2015/05/23 职场文书
2019年感恩励志演讲稿(收藏备用)
2019/09/11 职场文书
mysql对于模糊查询like的一些汇总
2021/05/09 MySQL
使用CSS连接数据库的方式
2022/02/28 HTML / CSS
python可视化分析绘制带趋势线的散点图和边缘直方图
2022/06/25 Python