BUG排查-koa2中koa-body和koa-bodyparser共用时POST会出现超时

简介: 周日有个小伙加我,帮他排查了一下问题。正好记录一下。前端是:axios后台是:koa2问题:axios 发 post 请求不携带参数请求正常,携带参数就无响应。因为我也不知道小伙那些说的是真的,那些是假的,那我们就一点一点排查,我大致定位问题为以下几个方向。参数携带不正确,axios 发过去的数据是错的,比如说被 {id: 1} 却发送的 [object Object]参数携带不正确,比如说后台只接收 appliction/json、application/x-www-form-urlencoded、multipart/form-data 其中一种这流程没毛病吧,先找前端自

排查问题


前端请求数据排查


因为不知道小伙水平,就没看 network。我让他直接请求我的接口 https://www.lilnong.top/cors/koa-sf,然后让他截图。


发现数据被收到了,证明前端肯定是没问题的。


bVbEA3j.webp.jpg


服务端排查


路由排查


开始我怀疑他路由配置有问题。看上去这个路由也没问题。有请求就应该能收到。


bVbEA8s.webp.jpg


content-type 限制排查


原生的话,就是监听流,然后拼接。


new Promise(function(resolve){
    let str = ''
    ctx.req.on('data', (data) => {
        str += data
    })
    ctx.req.addListener('end', () => {
        resolve(str)
    })
})


中间件的话,就是 koa-bodykoa-bodyparser 之类的,通过小伙的截图看到如下画面。支持多种类型,起来也没问题。


2.png


其他中间件排查


因为小伙是新手嘛,总有可能用一些奇奇怪怪的中间件,看看是不是有什么检查阻塞了请求。


bVbEBgj.webp.jpg


这张图片上就有疑点了,使用了两个中间件都是处理 body 的。


app.use(bodyParser())

app.use(KoaBody())

用关键词一搜索,妥妥的 BUG 呀。那我们把 app.use(bodyParser()) 一删就 OK 了。


bVbEBi4.webp.jpg


起服务,刷页面,测试,OK。


为什么 koa-bodyparserkoa-body 一起使用会有问题


感兴趣的小伙伴可以去看看源码。


这两个库都依赖 co-body 这个库,这个库里面依赖 raw-body。然后下图可以看到,使用的还是流。


bVbEBog.webp.jpg

相关文章
|
2月前
|
NoSQL 前端开发 测试技术
若依修改,若依如何发送请求---王清江07,axios的请求在request.js文件中,若依发送GET请求,必须用param
若依修改,若依如何发送请求---王清江07,axios的请求在request.js文件中,若依发送GET请求,必须用param
|
4月前
|
JavaScript 前端开发 API
在js中get和post的区别
在js中get和post的区别
|
4月前
|
数据采集 JavaScript 前端开发
利用axios库在Node.js中进行代理请求的实践
利用axios库在Node.js中进行代理请求的实践
|
JavaScript
node.js如何获取post和get请求的参数
node.js如何获取post和get请求的参数
88 0
|
4月前
|
JavaScript 前端开发
node.js第四天--ajax在项目中的应用
node.js第四天--ajax在项目中的应用
46 0
|
JavaScript 前端开发 API
JS method请求方式的应用
JS method请求方式的应用
66 0
|
11月前
|
前端开发 中间件
82 # koa-bodyparser 中间件的使用以及实现
82 # koa-bodyparser 中间件的使用以及实现
51 0
|
JavaScript 网络协议 数据安全/隐私保护
Node.js入门之url模块和querystring模块
url模块和querystring模块是非常重要的两个URL处理模块。在做node服务端的开发时会经常用到。
147 0
|
移动开发 编解码 weex
weex开发 - 加载index.js崩溃,白屏(may it has been destroyed so method:fireEvent is ignored,Url must be passe)
weex开发 - 加载index.js崩溃,白屏(may it has been destroyed so method:fireEvent is ignored,Url must be passe)
331 0