zhangyuang/egg-react-ssr

ctx.body的内容读取不到

Closed this issue · 5 comments

根据以往用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中间件引起,若有别的方式也可以

你的目的是啥?ctx.body在本项目中返回的就是一个stream

该stream流如何来做gzip呢?用原有方式肯定不行了

另外还有个问题,就是js和css并不是走stream流的形式,那这种又怎么开启gzip呢

有很多可以把流 gzip的库,而且gzip这个设置你应该在nginx一层做而不是node

静态文件丢专业的cdn上面去如果你要放本地文件,你应该去看egg的文档如何开启gzip