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();
}))
网友评论