美文网首页
nodejs Bigpipe 页面分割加载笔记

nodejs Bigpipe 页面分割加载笔记

作者: 马贞晓 | 来源:发表于2018-11-27 14:57 被阅读0次

    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 页面分割加载笔记

          本文链接:https://www.haomeiwen.com/subject/kipgqqtx.html