Go net/http 与 nodejs Koa 的 Σ(・□・;)

最近跟猫猫正在写一个一起听音乐的项目「側に」,然后昨天晚上就在一起通宵写代码的说~我对 stream 和 P2P 也了解得蛮少的,就跟着猫猫一起一边学一边写~是 Pair Programming (/ω\)!

猫猫找到了一个 Go 里面的 P2P 的库 libp2p。于是一番商量之后,打算先写一个可以通过 P2P 方式相互连接的小 demo 出来~猫猫跑去用 nodejs 写服务器端的 tracker,我则是跑去研究这个库里的 example 写 client 出来~

一边开着 TeamViewer 一起听歌,一边开了几个 VSCode 的 Live Share 开始写~其实到这里都还好喵,还是蛮顺利的!然而在测试的时候发现, Go 这边一 POST JSON 数据过去,那边服务器就 throw error 了 Σ(・□・;)

一开始的时候在想为什么 Koa 一直没有收到数据,后来用「手动挡」发现,自己给 Koa addListener 的话,的确数据都是正常的样子><

然后就陷入了沉思,莫非是又遇到了什么神奇的坑了么(゚o゚;; 而且猫猫那边用 nodejs axios 发给 server 却又都是正常的……咕噜咕噜呜(>﹏<)

啊,这实在是不够科学!于是找猫猫要了一下 tracker 部分的代码喵,在本地跑了一下之后发现,这边本地 POST 也炸了!

炸了之后跟猫猫怀疑是不是 Go 里面 net/http POST 的时候默认 gzip 了,但是 Content-Length 又的确是原始的 JSON 字符串的长度的说……

但是嘛…总之先直接上 curl 来测试 POST 试试看!以及猫猫那边也去加上了处理 gzip data 的中间件

curl -vvv -X POST -d '{"ip":"131.238.72.95","port":"64224","multiaddr":"QmeKKbnYy8ryM421nYVRELZmaW1Ms4hG6UjHoTUAksm733"}' http://localhost:3000/

啊啊啊啊啊 这是为什么呢!

在一起怀疑人生的时候,我好像突然有了什么预感!まさか?!

难道说 koa-bodyparser 是依赖于 HTTP Header 里面的 Content-Type 的?哒哒哒跑去设置了 Go 里 POST 请求的 Header 里的 Content-Typeapplication/json;charset=utf-8

于是再一测试~啊!终于没问题了,此刻已然是早上 6 点多了_(:3」∠)_ 赶紧把代码稍微调整了一下,去掉了一堆 fmt.Println,统统改成了统一的 logrus 库输出日志,就跑去 prpr 猫猫了 PR 了!

声明: 本文为 Cocoa 原创, 转载注明出处喵~

2 thoughts on “Go net/http 与 nodejs Koa 的 Σ(・□・;)”

Leave a Reply

Your email address will not be published. Required fields are marked *