zoukankan      html  css  js  c++  java
  • Express bodyParser中间件使用方式

    bodyParser中间件用来解析http请求体,是express默认使用的中间件之一。

    1.这个模块提供以下解析器

      (1) JSON body parser (2) Raw body parser (3)Text body parser (4)URL-encoded form body parser

    2.如何安装 

      npm install body-parser

    3.API

      var bodyParser = require('body-parser');

      可以通过body-parser对象创建中间件,当接受到客户端请求时所有的中间件都会给req.body添加属性,请求内容为空时,解析为空或者错误。

      (1)bodyParser.json(options)

        处理json数据

        app.use(bodyParser.json());

      (2)bodyParser.raw(options)

        处理Buffer数据流

      (3)bodyParser.text(options)

        处理文本数据

      (4)bodyParser.urlencoded(options)   

        处理UTF-8的编码的数据

        app.use(bodyParser.urlencoded({extented:false}))    

        extend

        ture->使用queryString库(默认) false->使用qs库。

    使用express应用生成器生成一个网站,它默认已经使用了 bodyParser.json 与 bodyParser.urlencoded 的解析功能,除了这两个,bodyParser还支持对text、raw的解析。

    顾名思义,bodyParser.json是用来解析json数据格式的。bodyParser.urlencoded则是用来解析我们通常的form表单提交的数据,也就是请求头中包含这样的信息: Content-Type: application/x-www-form-urlencoded

    bodyParser.urlencoded 模块用于解析req.body的数据,解析成功后覆盖原来的req.body,如果解析失败则为 {}

    常见的四种Content-Type类型:

    • application/x-www-form-urlencoded 常见的form提交
    var bodyParser = require('body-parser');
    app.use(bodyParser.urlencoded({ extended: false }));
    app.post('/api/user/insert', function (req, res) {
        console.log(req.body);
    })
    

      

    • multipart/form-data 文件提交
    var multipart = require('connect-multiparty');
    var multipartMiddleware = multipart();
    app.post('/formdata',multipartMiddleware, function (req, res) {
      console.log(req.body);
      res.send("post successfully!");
    });
    

      

    • application/json 提交json格式的数据
    var bodyParser = require('body-parser');
    app.use(bodyParser.json());
    app.post('/api/user/insert', function (req, res) {
        console.log(req.body);
    })
    

      

    • text/xml 提交xml格式的数据

    body-parser默认不支持这种数据格式

    • 解决方法:把请求体参数按照字符串读取出来,然后使用 xml2json 包把字符串解析成json对象,然后对json对象进行操作,方便得多。
    • 注意:我们还是要使用 body-parse 得到字符串,然后再转化.

      利用req上定义的事件 data 来获取http请求流, end 事件结束请求流的处理.

      利用 xml2json 把上面得到的请求参数流(我们直接转化为字符串)转化为 json 对象.

      demo如下:
    var express = require('express');
    var bodyParser = require('body-parser');
    var xml2json=require('xml2json');
    var app = express();
    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));
      }); 
    });
    

      

    更改之后就可以收到axiso传来的数据了,将来如果正式环境用到可以统一协商一下,使用application/x-www-form-urlencoded还是json,然后前后端统一更改就可以了。

  • 相关阅读:
    如何让一个对话框全屏对话框
    学习网络请求返回json对应的model
    学习网络请求返回json对应的model
    android获取未安装APK签名信息及MD5指纹
    android获取未安装APK签名信息及MD5指纹
    Android stadio 模板 liveTemplate不管用
    Android stadio 模板 liveTemplate不管用
    android 事件传递机制
    android systemtrace 报错
    我今天的收获,必备stadio 插件
  • 原文地址:https://www.cnblogs.com/shj-com/p/9590335.html
Copyright © 2011-2022 走看看