Koa2学习(四)POST请求
Koa2学习(四)POST请求
接受请求
POST请求的数据实体,会根据数据量的大小进行分包传送。
当node.js后台收到post请求时,会以buffer的形式将数据缓存起来。Koa2中通过ctx.req.addListener('data', ...)这个方法监听这个buffer。
我们简单的看一下
同样先简单起一个服务:
const Koa = require('koa')
const app = new Koa()
app.use(async ctx => {
const req = ctx.request
const url = req.url // 请求的url
const method = req.method // 请求的方法
ctx.req.addListener('data', (postDataChunk) => {
console.log('收到post数据 ---->' ,postDataChunk)
})
ctx.body = {
url,
method,
}
})
app.listen(8000)
module.exports = app
在终端模拟一个http post请求,传入简单的test字符串:
$ curl -d 'test' http://localhost:8000
此时看到node后台打印:
收到post数据 ----> <Buffer 74 65 73 74>
可以看到打印的是一个buffer对象,我们buffer对象里的4个数字大家应该都能猜到代表了t,e,s,t四个字符串。
解析数据
既然拿到了请求数据,那么解析数据就好办了。如果是普通的字符串,可以直接通过字符串拼接来获取。我们更新一下核心代码:
app.use(async ctx => {
const req = ctx.request
const url = req.url // 请求的url
const method = req.method // 请求的方法
let post_data = ''
ctx.req.addListener('data', (postDataChunk) => {
console.log('收到post数据 ---->' ,postDataChunk)
post_data += postDataChunk
})
ctx.req.addListener('end', () => {
console.log('接收post数据完毕 ---->', post_data)
})
ctx.body = {
url,
method,
}
})
再模拟一个请求:
$ curl -i -X POST -H "'Content-type':'application/json'" -d '{"ATime":"atime","BTime":"btime"}' http://localhost:8000
可以看到node.js后台输出:
收到post数据 ----> <Buffer 7b 22 41 54 69 6d 65 22 3a 22 61 74 69 6d 65 22 2c 22
42 54 69 6d 65 22 3a 22 62 74 69 6d 65 22 7d>
接收post数据完毕 ----> {"ATime":"atime","BTime":"btime"}
注意,对于字符串类post数据,上面以字符串接收是没问题的,但其实 postDataChunk 是一个 buffer 类型数据,在遇到二进制时(例如文件类型)样的接受方式存在问题。
总结
- post请求会被node.js缓存成多个buffer对象。
- 字符串可以直接通过字符串拼接buffer对象来获取请求数据,但是文件类型的数据需要特殊的处理方式。
Koa2学习(四)POST请求的更多相关文章
- Koa2学习(三)GET请求
Koa2学习(三)GET请求 GET请求是前后端交互最常用的请求之一,常常用来进行查询操作. 那么Koa是如何接收并处理GET请求呢? 创建一个服务 // 引入Koa const Koa = requ ...
- HttpwebClient的四种请求方式
最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷. 本文旨在发布代码,供自己参考,也供大家参考,谢谢. 正题: Ht ...
- ajax学习之post请求步骤
ajax学习之post请求步骤 蚣汉御豁 讼护尧 娉郐皑 磲 力豪强的虎视眈眈相信过不了 觏随迦趾 怪了灵敏儿竟然不慌不忙的也没有来找她们 缸轰诎 ?ê戆冼 跄鲅胗绩 掳戈玉孑 馀模嗷婧 ...
- Koa2学习(八)使用session
Koa2学习(八)使用session koa2框架不提供session的处理方法,这里我们需要借助一个第三方中间件koa-session来处理session. 先安装插件: $ npm i koa-s ...
- Koa2学习(七)使用cookie
Koa2学习(七)使用cookie Koa2 的 ctx 上下文对象直接提供了cookie的操作方法set和get ctx.cookies.set(name, value, [options])在上下 ...
- Koa2学习(六)使用koa-router
Koa2学习(六)使用koa-router 配置简单路由 引入中间件 配置需要的路由 通过app.use注册路由 const Koa = require('koa') const app = new ...
- Koa2学习(五)中间件
Koa2学习(五)中间件 Koa2通过app.use(function)方法来注册中间件. 所有的http请求都会依次调用app.use()方法,所以中间件的使用顺序非常重要. 中间件的执行顺序 官方 ...
- Spring Boot 项目学习 (四) Spring Boot整合Swagger2自动生成API文档
0 引言 在做服务端开发的时候,难免会涉及到API 接口文档的编写,可以经历过手写API 文档的过程,就会发现,一个自动生成API文档可以提高多少的效率. 以下列举几个手写API 文档的痛点: 文档需 ...
- Flask框架 (四)—— 请求上下文源码分析、g对象、第三方插件(flask_session、flask_script、wtforms)、信号
Flask框架 (四)—— 请求上下文源码分析.g对象.第三方插件(flask_session.flask_script.wtforms).信号 目录 请求上下文源码分析.g对象.第三方插件(flas ...
随机推荐
- Python3--中括号"[]"与冒号":"在列表中的作用
先来定义两个列表: liststr = ["helloworld","hahahh","123456"] listnum = [1,2,3, ...
- python-爬虫学习(文字、图片、视频)
爬虫-文字爬取 import re import requests respone = requests.get('https://ishuo.cn/') ##获取网站url data = respo ...
- 【HDU 5934】Bomb(强连通缩点)
Problem Description There are N bombs needing exploding. Each bomb has three attributes: exploding r ...
- Ubuntu 配置Apache虚拟目录
http://blog.csdn.net/spring21st/article/details/6589300 Ubuntu 配置Apache虚拟目录 http://blog.csdn.net/spr ...
- java数据结构简单点
java常用的数据结构一 集合框架主要就是Collection和Map: 1.Collection包含了List和Set两大分支. (1)List是一个有序的集合,每一个元素都有它的索引.第一个元素的 ...
- NOIP2009T3最优贸易(Dfs + spfa)
洛谷传送门 看到这个题,原本想先从后往前dfs,求出能到终点的点,再在这些点里从前往后spfa,用一条边上的两个城市的商品价格的差来作边权,实施过后,发现图中既有负边权,又有回路,以及各种奇奇怪怪的东 ...
- 公路修建(Prim)
洛谷传送门 这道水题告诉了我,堆优化的prim有时还不如朴素prim快... 居然记错时间复杂度了,我也真是菜. #include <cstdio> #include <queue& ...
- TJOI2014
匹配 给出一个\(n(n\leq80)\)个点对\(n\)个点的带权二分图,求所有最大权匹配的交集. 先求出一个最大权匹配,然后枚举每一条匹配中的边,检验删除该边后是否还能形成最大权匹配.如果能则说明 ...
- 重写jQuery serialize方法,使文本框在没有输入的情况下,使用其支持默认值
未压缩版 jQuery.fn.extend({ serialize:function() { return jQuery.param(this.serializeArray()); }, serial ...
- Hive安装中遇到过的坑
实现说明每一个用户的环境都有细微的不一致,所以这里只是个人经过这些坑的处理,但是不意味着所有处理都是这样的操作,仅作为参考. 第一个坑 数据库安装,数据库最好装在Linux上,一直出了很多错,这里有一 ...