// 通过报头的Transfer-Encoding或Content-Length即可判断请求中是否带有内容
var hasBody = function(req) {return 'transfer-encoding' in req.headers || 'content-length' in req.headers;
};// 在HTTP_Parser解析报头结束后,报文内容部分会通过data事件触发
function (req, res) {if (hasBody(req)) {var buffers = [];req.on('data', function (chunk) {buffers.push(chunk);});req.on('end', function () {req.rawBody = Buffer.concat(buffers).toString();handle(req, res);});} else {handle(req, res);}
}

表单数据:最为常见的数据提交就是通过网页表单提交数据到服务器端:

<form action="/upload" method="post"><label for="username">Username:</label> <input type="text" name="username" id="username" /><br /><input type="submit" name="submit" value="Submit" />
</form>
// 默认的表单提交,请求头的Content-Type字段值为application/x-www-form-urlencoded
// 即:Content-Type: application/x-www-form-urlencoded
// 解析
var handle = function(req, res) {if (req.headers['content-type'] === 'application/x-www-form-urlencoded') {req.body = querystring.parse(req.rawBody);}todo(req, res);
};

其他格式: JSON和XML文件等,判断和解析他们的原理都比较相似,都是依据Content-Type中的值决定,其中JSON类型的值
为application/json,XML的值为application/xml

// JSON文件
// 对于Node来说,要处理它不需要额外的任何库
var handle = function(req, res) {if (mime(req) === 'application/json') {try {req.body = JSON.parse(req.rawBody);} catch (e) {// 异常内容,响应Bad requestres.writeHead(4000);res.end('Invalid JSON);return;}}todo(req, res);};// XML文件
var xml2js = require('xml2js');
var handle = function (req, res) {if (mime(req) === 'application/xml') {xml2js.parseString(req.rawBody, function (err, xml) {if (err) {// 异常内容, 响应Bad requestres.writeHead(400);res.end('Invalid XML');return;}req.body = xml;todo(req, res);});}
};

node --- http数据上传相关推荐

  1. 前端点滴(Node.js)(五)---- 构建 Web 应用(二)数据上传

    Node.js 2. 数据上传 在实际的业务中,我们往往需要接收一些数据,比如表单数据.文件提交.Json上传.XML上传等等. Node的http模块只对HTTP报文头部进行了解析,然后触发requ ...

  2. 【Hadoop】HDFS操作、数据上传与下载原理解析、高级特性及底层原理

    HDFS操作.数据上传与下载原理解析.高级特性及底层原理 1 HDFS操作 1.1 Web Console网页工具 1.2 命令行 1.2.1 普通的操作命令 1.2.2 管理员命令 1.3 Java ...

  3. 2020-08-20 将数据上传到 S3 或从S3下载

    将数据上传到 S3 在上个 notebook 中,你应该使用给定剽窃/非剽窃文本数据语料库的特征和类别标签创建了两个文件:training.csv 和 test.csv 文件. 以下单元格将加载一些 ...

  4. 【AllJoyn专题】基于AllJoyn和Yeelink的传感器数据上传与指令下行的研究

    接触高通物联网框架AllJoyn不太久,但确是被深深地吸引了.在我看来,促进我深入学习的原因有三点:一.AllJoyn开源,对开源的软硬件总会有种莫名的喜爱,虽然或许不会都深入下去:二.顺应潮流,物联 ...

  5. MaxCompute Tunnel SDK数据上传利器——BufferedWriter使用指南

    为什么80%的码农都做不了架构师?>>>    摘要: MaxCompute 的数据上传接口(Tunnel)定义了数据 block 的概念:一个 block 对应一个 http re ...

  6. m5310模组数据上传至onenet_NBIOT模组M5310接入中国移动物联网开放平台示例文档

    <time>: -t 设备存活时间,标示终端和 OneNET 平台之间连接的存活周 期,设置范围为 10s~86400s: : -u 设置 PUT 和 POST 指令分片长度,范围 0~6 ...

  7. 检查文件上传完成_“我的数据上传NCBI又报错了...” “攻略拿去!”

    在上一期的内容中,我们分享了NCBI测序数据上传的主要步骤和资料填写的注意事项.今天跟大家分享最后一步:原始测序数据的上传以及上传后项目编号的相关类型和含义. 图1 NCBI测序数据上传步骤 | 原始 ...

  8. Arduino--ESP8266物联网WIFI模块(贝壳物联)--数据上传服务器(单数据接口)

    一.简介 随着移动物联网的发展,各场景下对于物联控制.数据上传.远程控制的诉求也越来越多,基于此乐鑫科技推出了便宜好用性价比极高的wifi物联模块--ESP8266,话不多少我们先来看看这个神奇的模块 ...

  9. m5310模组数据上传至onenet_硬核干货!基于M5310-A的NB-IoT水表通信模块软件业务逻辑分享...

    根据不同的应用场景需求,目前NB-IoT水表主要有以下几种方案: 图1 几种常见NB水表方案 接下来将从NB-IoT水表上电开机.模组初始化.入网判断.业务逻辑四个环节来详细讲述,以下业务流程仅供参考 ...

最新文章

  1. 【OpenCV 4开发详解】Scharr算子
  2. VSS admin用户忘记密码的解决方法
  3. 第五节:泛型(泛型类、接口、方法、委托、泛型约束、泛型缓存、逆变和协变)
  4. B. Balanced Lineup
  5. 一篇文章告诉你[C++]数组初始化
  6. python 下载文件-Python实现http文件下载
  7. [转载] Python基于机器学习方法实现的电影推荐系统
  8. finally语句与return语句相关问题
  9. PXE+NFS+FTP+kickstarter无人值守安装linux系统
  10. Java语言实现矩阵卷积运算
  11. linux find命令 括号,Linux中find命令细节详解
  12. 1,标准差的计算 2,标准分数z-score
  13. 无线信号的接收流程和接收机中基本结构的具体功能
  14. 大数据工程师技术栈探讨
  15. 社群运营怎么做更有效?
  16. Echarts桑基图sankey点击高亮显示
  17. 灵魂一问-如何彻底防止APK反编译?积累总结
  18. 本地时间与Web标准时间校对
  19. 架构道术-从心流视角看费曼学习法
  20. CDN和京东仓库的那些事儿

热门文章

  1. 视频图像处理平台对比_对比传统智能结算,戈子视觉结算有了质的改变
  2. 人机接口要学哪些计算机语言,智能人机接口
  3. vue axios 发送get请求传递参数给后端失败_Java之Vue插件之Axios
  4. mendeley引用参考文献不显示_免费文献管理器Mendeley
  5. 生成FaceBook所需的散列哈希值
  6. matlab 计算N天前(后)的日期
  7. VC 2010下安装OpenCV2.4.4
  8. 20080331 - What is a PID, How is it useful when troubleshooting a system
  9. 《Linux命令行与shell脚本编程大全 第3版》Shell脚本编程基础---23
  10. Win10 + Python + MXNet + VS2015配置