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 相关文章推荐
JS面向对象编程浅析
Aug 28 Javascript
jquery 淡入淡出效果的简单实现
Feb 07 Javascript
jQuery实现单击和鼠标感应事件
Feb 01 Javascript
详解JavaScript编程中的数组结构
Oct 24 Javascript
JavaScript代码实现左右上下自动晃动自动移动
Apr 08 Javascript
使用electron将vue-cli项目打包成exe的方法
Sep 29 Javascript
微信小程序new Date()方法失效问题解决方法
Jul 29 Javascript
详解小程序如何改变onLoad的执行时机
Nov 01 Javascript
JavaScript this使用方法图解
Feb 04 Javascript
解决vue的touchStart事件及click事件冲突问题
Jul 21 Javascript
vue-quill-editor 自定义工具栏和自定义图片上传路径操作
Aug 03 Javascript
JavaScript实现简易计算器小功能
Oct 22 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 数组入门教程小结
2009/05/20 PHP
PHP函数篇之掌握ord()与chr()函数应用
2011/12/05 PHP
ThinkPHP登录功能的实现方法
2014/08/20 PHP
php数组中删除元素之重新索引的方法
2014/09/16 PHP
PHP类的自动加载与命名空间用法实例分析
2020/06/05 PHP
PHP使用POP3读取邮箱接收邮件的示例代码
2020/07/08 PHP
jquery 弹出层注册页面等(asp.net后台)
2010/06/17 Javascript
AeroWindow 基于JQuery的弹出窗口插件
2011/06/27 Javascript
PHPExcel中的一些常用方法汇总
2015/01/23 Javascript
浅析函数声明和函数表达式——函数声明的声明提前
2016/05/03 Javascript
vue.js中$watch的用法示例
2016/10/04 Javascript
JS三目运算(三元运算)方法详解
2017/03/01 Javascript
详解vue前后台数据交互vue-resource文档
2017/07/19 Javascript
JS实现按钮颜色切换效果
2020/09/05 Javascript
Vue精简版风格概述
2018/01/30 Javascript
js常用正则表达式集锦
2019/05/17 Javascript
VUE DEMO之模拟登录个人中心页面之间数据传值实例
2019/10/31 Javascript
Vue环境搭建+VSCode+Win10的详细教程
2020/08/19 Javascript
Vue仿百度搜索功能
2020/12/28 Vue.js
[01:19:11]Ti4 循环赛第二日 NaVi.us vs iG
2014/07/11 DOTA
Python有序字典简单实现方法示例
2017/09/28 Python
python编写朴素贝叶斯用于文本分类
2017/12/21 Python
python对离散变量的one-hot编码方法
2018/07/11 Python
python读写csv文件实例代码
2019/07/05 Python
Python叠加两幅栅格图像的实现方法
2019/07/05 Python
python对csv文件追加写入列的方法
2019/08/01 Python
Python List列表对象内置方法实例详解
2019/10/22 Python
python序列类型种类详解
2020/02/26 Python
PyTorch 导数应用的使用教程
2020/08/31 Python
Amaze UI 文件选择域的示例代码
2020/08/26 HTML / CSS
Famous Footwear加拿大:美国多品牌运动休闲鞋店
2018/12/05 全球购物
家长评语和期望
2014/02/10 职场文书
高中语文课后反思
2014/04/27 职场文书
毕业生捐书活动倡议书
2015/04/27 职场文书
2016教师节感恩话语
2015/12/09 职场文书
诉讼和解协议书
2016/03/23 职场文书