node.js 下依赖Express 实现post 4种方式提交参数
来源:互联网 发布:西安软件培训学校 编辑:程序博客网 时间:2024/06/08 09:19
http://yijiebuyi.com/blog/90c1381bfe0efb94cf9df932147552be.html
在2014年的最后一天和大家分享关于node.js 如何提交4种格式的post数据.
上上一篇说到了关于http协议里定义的4种常见数据的post方法 ,详细介绍请点击查看.
分别是这四种:
www-form-urlencoded,
form-data,
application/json,
text/xml
Express 依赖 bodyParser 对请求的包体进行解析,默认支持:application/json, application/x-www-form-urlencoded, multipart/form-data.可惜对xml没有支持,需要自己代码来实现,下面我们一一简单介绍.
(一) www-form-urlencoded
http默认的post请求是这种方式,注意这是是默认的提交方式,比如你写一个<form>....<input type="submite" /></form> form表单,里面的submite按钮默认就是这种 www-form-urlencoded 方式提交的.
node.js 下使用Express 如何接收这种提交方式.需要 body-parse 插件支持,Express 和body-parse 的依赖关系在4.0以下版本和4.0以上版本是不同的,可以搜索本站 body-parse 关键词查看.
var express = require('express');var bodyParser = require('body-parser');var app = express();var server = require('http').createServer(app);app.use(bodyParser.urlencoded({ extended: true}));var PORT = process.env.PORT || 8002;server.listen(PORT);
上面搭建起一个简单的server ,node app.js 运行起来,现在是可以接收 post www-form-urlencoded类型参数的.
我们在上面的代码中加上一个路由.
app.post('/urlencoded', function (req, res) { console.log(req.body); res.send(req.body);});//注意,这个路由应该是加在 var PORT=process.env.PORT || 8002; 上面
现在用postman模拟一个post请求,
红框指定了提交方式是 www-form-urlencoded 方式
可以看到 200 状态,成功识别了请求参数并且返回来.
(二) form-data
也是比较常用的提交数据的方式,和上面一种不同的是form表单里需要有 enctype 标识.
比如我们在上传文件的时候,必须在form标签里做这样的标识 enctype="multipart/form-data"
而这种提交方式一般用在文件上传,所以 在node.js 里处理这类表单还需要 中间件 connect-multiparty ,他是专门处理此类post数据相关的依赖包.github官方地址: https://github.com/andrewrk/connect-multiparty
npm install connect-multiparty
使用也非常简单,上面的代码不变,只需要在你的相关路由里指定此中间件,它就可以帮你处理请求.
var multipart = require('connect-multiparty');var multipartMiddleware = multipart();app.post('/formdata',multipartMiddleware, function (req, res) { console.log(req.body); res.send(req.body);});
我用postman模拟,没有办法上传文件,只模拟表单...参数同样直接返回客户端,
(三) application/json
一般api喜欢此类提交方式,数据使用方法,节省带宽.
bodyParser 支持此类参数解析.
注意: 在提交之前需要指定http 请求头为 content-type=application/json
代码如下:
var express = require('express');var bodyParser = require('body-parser');var multipart = require('connect-multiparty');var multipartMiddleware = multipart();//var morgan = require('morgan');var app = express();var server = require('http').createServer(app);app.use(bodyParser.json({limit: '1mb'})); //这里指定参数使用 json 格式app.use(bodyParser.urlencoded({ extended: true}));app.post('/json', function (req, res) { console.log(req.body); res.send(req.body);});var PORT = process.env.PORT || 8002;server.listen(PORT);
注意上面的配置参数,指定参数使用json格式.
app.use(bodyParser.json({limit: '1mb'}));
(四) text/xml
这种请求类型不是特别常见, body-parse默认也不解析这种数据格式,目前腾讯微信平台在使用这种数据交换格式.node.js 在express 如何解析这种格式,没有好的办法,只能自己用代码处理,把请求体参数按照字符串读取出来,然后使用 xml2json 包把字符串解析成json对象,使用起来就方便多了.
注意:
我们还是要使用 body-parse 得到字符串,然后再转化.
xml格式请求需要指定 http 请求头 content-type=text/xml
利用req上定义的事件 data 来获取http请求流, end 事件结束请求流的处理.
利用 xml2json 把上面得到的请求参数流(我们直接转化为字符串)转化为 json 对象.
npm install xml2json
代码如下:
var express = require('express');var bodyParser = require('body-parser');var xml2json=require('xml2json');var app = express();var server = require('http').createServer(app);app.use(bodyParser.urlencoded({ extended: true}));app.post('/xml', function (req, res) { req.rawBody = ''; var json={}; req.setEncoding('utf8'); req.on('data', function(chunk) { req.rawBody += chunk; }); req.on('end', function() { json=xml2json.toJson(req.rawBody); res.send(JSON.stringify(json)); }); });var PORT = process.env.PORT || 8002;server.listen(PORT);
我们最后也是把提交的xml格式字符串转化成json对象输出到客户端.
- node.js 下依赖Express 实现post 4种方式提交参数
- node.js 下依赖Express 实现post 4种方式提交参数
- nodejs下基于express实现post4种方式提交参数
- node.js post方式的表单提交
- express 解析post方式下的json参数
- node.js依赖express解析post请求四种数据格式()
- Node.js+Express构建Http服务(GET方式和POST方式)
- Node.js+Express构建Http服务(GET方式和POST方式)
- Node.js+Express构建Http服务(GET方式和POST方式)
- post接口提交参数方式
- HttpClient 实现重定向 以表单方式post提交参数
- Node.js express获取参数有三种方法
- Node.js express获取参数有三种方法
- Node.js express获取参数有三种方法
- JS使用post方式提交
- node.js中post如何被提交
- node+express下获取请求参数
- Node express GET和POST获取参数的三种方法
- tensorflow 维度变化
- iOS 某一个界面实现强制横屏
- 微信公众号三级分销海报,php开发公众平台,生成推广海报
- ocx使用
- PHPMailer类实现邮件发送
- node.js 下依赖Express 实现post 4种方式提交参数
- linux(vim跳行)
- Spring Cloud的应用程序—上下文服务
- 算法与数据结构——算法题 27:字符移位(腾讯2017暑期实习生编程题) ? 待解决
- JNI 简述
- Android和H5交互
- 云星数据---Scala实战系列(精品版)】:Scala入门教程051-Scala实战源码-Scala implicit 操作02
- 少年郎,你需要封装好的 ViewPager 工具类
- 用python做高数线代题