nodejs Bigpipe 页面分割加载笔记

Bigpipe页面分割

项目中需要打印日志文件,因文件过大所以分割加载,以便将来改为持续输出加载

1、 在使用await前,系统自己结束了res输出,造成报错end after write,于是使用await停止当前resopnse结束,等待主动触发res.end(),才进入正常大页面分割输出
2、输出报错404,但是,文件已经触发了end,并正常返回,于是设置文件头writeHead status code为200 返回正常

/**
 * @name 日志文件打印
 */

app.use(router.get("/xxx",async (ctx,next)=>{

    let url = "./logs/logfile.log";
    let num = ctx.query["old"];
    if(num) url+="."+num

   //   设置文件头
    ctx.res.writeHead(200,{
        'Accept': 'text/plain',
        'Content-Type':'text/plain;charset=utf-8',
        'Transfer-Encoding' : 'chunked'
    })

    await (new Promise((resolve,reject)=>{

        let st = fs.createReadStream(url,{highWaterMark:10})
        st.setEncoding("utf8");

        st.on("data",d=>{
          ctx.res.write(d);
        })

        st.on("end",d=>{
          ctx.res.end();
        })
    }))   
    next();
}))

你可能感兴趣的:(nodejs Bigpipe 页面分割加载笔记)