nodejs Bigpipe页面分割

本文介绍了一个利用Bigpipe技术进行页面分割和日志文件打印的实践案例。项目中采用Bigpipe来处理大文件输出,通过await机制确保响应正确结束,避免endafterwrite错误。同时,通过设置文件头的writeHead状态码为200解决404问题,确保日志文件的正常返回。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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();
}))

复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值