Nodejs中Express 常用中间件 body-parser 实现解析
写在前面
本文从简单的例子出发,探究 入门基础在正式讲解前,我们先来看一个POST请求的报文,如下所示。 chyingp
其中需要我们注意的有
body-parser主要做了什么
1.处理不同类型的请求体:比如text、json、urlencoded等,对应的报文主体的格式不同。 2.处理不同的编码:比如utf8、gbk等。 3.处理不同的压缩类型:比如gzip、deflare等。 4.其他边界、异常的处理。 一、处理不同类型请求体为了方便读者测试,以下例子均包含服务端、客户端代码,完整代码可在笔者github上找到。 解析text/plain客户端请求的代码如下,采用默认编码,不对请求体进行压缩。请求体类型为 var options = {
hostname: '127.0.0.1',port: '3000',path: '/test',method: 'POST',headers: { 'Content-Type': 'text/plain','Content-Encoding': 'identity' } }; var client = http.request(options,(res) => { client.end('chyingp'); 服务端代码如下。 var parsePostBody = function (req,done) {
var arr = []; var chunks; req.on('data',buff => { req.on('end',() => { var server = http.createServer(function (req,res) { server.listen(3000); 解析application/json客户端代码如下,把 var options = {
hostname: '127.0.0.1',headers: { 'Content-Type': 'application/json','Content-Encoding': 'identity' } }; var jsonBody = { var client = http.request(options,(res) => { client.end( JSON.stringify(jsonBody) ); 服务端代码如下,相比 var parsePostBody = function (req,done) {
var length = req.headers['content-length'] - 0; var arr = []; var chunks; req.on('data',(chunks) => { server.listen(3000); 解析application/x-www-form-urlencoded客户端代码如下,这里通过 var options = {
hostname: '127.0.0.1',headers: { 'Content-Type': 'form/x-www-form-urlencoded','Content-Encoding': 'identity' } }; var postBody = { nick: 'chyingp' }; var client = http.request(options,(res) => { client.end( querystring.stringify(postBody) ); 服务端代码如下,同样跟 var parsePostBody = function (req,(chunks) => {
var body = querystring.parse( chunks.toString() ); // 关键代码 res.end( Your nick is ${body.nick} )}); }); server.listen(3000); 二、处理不同编码很多时候,来自客户端的请求,采用的不一定是默认的 客户端请求如下,有两个要点。 1.编码声明:在Content-Type最后加上;charset=gbk 2.请求体编码:这里借助了iconv-lite,对请求体进行编码iconv.encode('程序猿小卡',encoding) var encoding = 'gbk'; // 请求编码
var options = { // 备注:nodejs本身不支持gbk编码,所以请求发送前,需要先进行编码 var client = http.request(options,(res) => { client.end(buff,encoding); 服务端代码如下,这里多了两个步骤:编码判断、解码操作。首先通过 var parsePostBody = function (req,done) {
var obj = contentType.parse(req.headers['content-type']); var charset = obj.parameters.charset; // 编码判断:这里获取到的值是 'gbk' var arr = []; req.on('data',() => { var server = http.createServer(function (req,(body) => { server.listen(3000); 三、处理不同压缩类型这里举个 1.压缩类型声明:Content-Encoding赋值为gzip。 2.请求体压缩:通过zlib模块对请求体进行gzip压缩。 var options = {
hostname: '127.0.0.1','Content-Encoding': 'gzip' } }; var client = http.request(options,(res) => { // 注意:将 Content-Encoding 设置为 gzip 的同时,发送给服务端的数据也应该先进行gzip client.end(buff); 服务端代码如下,这里通过 var parsePostBody = function (req,done) {
var length = req.headers['content-length'] - 0; var contentEncoding = req.headers['content-encoding']; var stream = req; // 关键代码如下 var arr = []; stream.on('data',buff => { stream.on('end',() => { stream.on('error',error => console.error(error.message)); var server = http.createServer(function (req,(chunks) => { server.listen(3000); 写在后面
另外,对于POST请求,还有一个非常常见的 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |