ctx.body的内容读取不到
Closed this issue · 5 comments
herorest commented
根据以往用egg的经验,ctx.body是可以正常读取到资源内容的,但是在本项目中的middleware里,通过读取ctx.body,读取到的是一段流信息,这个我不太懂,麻烦大佬们给看看是咋回事
{
"_readableState": {
"objectMode": true,
"highWaterMark": 16,
"buffer": {
"head": null,
"tail": null,
"length": 0
},
"length": 0,
"pipes": null,
"pipesCount": 0,
"flowing": null,
"ended": false,
"endEmitted": false,
"reading": false,
"sync": false,
"needReadable": true,
"emittedReadable": false,
"readableListening": false,
"resumeScheduled": false,
"destroyed": false,
"defaultEncoding": "utf8",
"awaitDrain": 0,
"readingMore": false,
"decoder": null,
"encoding": null
},
"readable": true,
"domain": null,
"_events": {
"unpipe": [
null,
null,
null
],
"drain": [
null,
null
],
"error": [
null,
null,
null
],
"close": [
null,
null
],
"finish": [
null,
null
]
},
"_eventsCount": 7,
"_maxListeners": 0,
"_writableState": {
"objectMode": true,
"highWaterMark": 16,
"finalCalled": false,
"needDrain": false,
"ending": false,
"ended": false,
"finished": false,
"destroyed": false,
"decodeStrings": true,
"defaultEncoding": "utf8",
"length": 0,
"writing": false,
"corked": 0,
"sync": true,
"bufferProcessing": false,
"writecb": null,
"writelen": 0,
"bufferedRequest": null,
"lastBufferedRequest": null,
"pendingcb": 0,
"prefinished": false,
"errorEmitted": false,
"bufferedRequestCount": 0,
"corkedRequestsFree": {
"next": null,
"entry": null
}
},
"writable": true,
"allowHalfOpen": true,
"_transformState": {
"needTransform": false,
"transforming": false,
"writecb": null,
"writechunk": null,
"writeencoding": null
}
}
事情的起因是使用gzip中间件引起,若有别的方式也可以
zhangyuang commented
你的目的是啥?ctx.body在本项目中返回的就是一个stream
herorest commented
该stream流如何来做gzip呢?用原有方式肯定不行了
herorest commented
另外还有个问题,就是js和css并不是走stream流的形式,那这种又怎么开启gzip呢
zhangyuang commented
有很多可以把流 gzip的库,而且gzip这个设置你应该在nginx一层做而不是node
zhangyuang commented
静态文件丢专业的cdn上面去如果你要放本地文件,你应该去看egg的文档如何开启gzip