JSON

Express 解析 json 格式 post 数据

字号+ 作者:H5之家 来源:H5之家 2017-10-19 16:04 我要评论( )

CNode:Node.js专业中文社区

node.js 下著名web框架 express ,对于解析json格式数据之前低版本需要依赖 bodyParser . 后来的版本把 bodyParser 继承进去. 使用的时候需要在express 配置项里 user(express.bodyParser({ keepExtensions: true, uploadDir: ‘/tmp’ }))

如下代码:

var express = require('express'), app = express(); app.configure(function () { app.use(express.bodyParser({ keepExtensions: true, uploadDir: '/tmp' })); }); Express 升级到4.x版本以后

升级以后的Express 所有的依赖包都拿出来了. 所以,如果你用了 Express 4.x 的某个版本来解析 json 方式的post请求数据 需要安装 body-parser

npm install body-parser

如果你的接口要求post 上来的数据格式是这样的:

{"data":{"name":"一介布衣","url":"http://yijiebuyi.com"}}

后端express 进过 bodyParser 的解析后,可以这样读取到数据

req.body.data.name 获取到 一介布衣 req.body.data.url 获取到 http://yijiebuyi.com 这里是有前提的,客户端请求接口时必须指名请求头类型 Content-Type=application/json

bodyParser 发现这样类型的请求头后,会自动将 body 里的 json 格式数据正确解析,否则 req.body.data 为 undefined

传统的服务器端语言可能会接收post上传的流,然后转成字符串最后在格式化成 json ,这样加不加application/json 请求头都是没有问题的

但是Express 中间件在解析body中的post参数会检查 Content-Type 类型,所以没有指定正确格式导致中间件解析参数出错.

那如何处理呢?

因为好多地方都在调用你的接口,你无法保证所有的人都在请求头里面加了 Content-Type=application/json

解决思路是:

服务器端 先用 req.body.data 参数获取参数,如果成功,说明 bodyParser 正确解析了json 参数. 还是按照之前的方法读取.

如果 req.body.data 参数无值或者undefined 那么我们也用流来读取post 数据,然后转成字符串再解析成 json 格式来使用. 直接上代码

app.post('/post', function (req, res) { if (req.body.data) { //能正确解析 json 格式的post参数 res.send({"status": "success", "name": req.body.data.name, "url": req.body.data.url}); } else { //不能正确解析json 格式的post参数 var body = '', jsonStr; req.on('data', function (chunk) { body += chunk; //读取参数流转化为字符串 }); req.on('end', function () { //读取参数流结束后将转化的body字符串解析成 JSON 格式 try { jsonStr = JSON.parse(body); } catch (err) { jsonStr = null; } jsonStr ? res.send({"status":"success", "name": jsonStr.data.name, "url": jsonStr.data.url}) : res.send({"status":"error"}); }); } });

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • nodejsjson对象,

    nodejsjson对象,

    2017-08-22 17:01

  • nodejs创建json对象,

    nodejs创建json对象,

    2017-08-19 14:04

  • Node.js实现Excel转JSON

    Node.js实现Excel转JSON

    2017-07-07 14:00

  • Node中的npm与package.json详解

    Node中的npm与package.json详解

    2017-06-02 17:05

网友点评
>