誰かがkoa.jsとストリームを操作しますか?
この例を考えてみましょう
const fs = require('fs');
const Koa = require('koa');
const app = new Koa();
app.use(async (ctx) => {
ctx.body = fs.createReadStream('really-large-file');
});
app.listen(4000);
ユーザーがリクエストを中止すると、どちらかが表示されます
Error: read ECONNRESET
at _errnoException (util.js:1024:11)
at TCP.onread (net.js:618:25)
または
Error: write EPIPE
at _errnoException (util.js:1024:11)
at WriteWrap.afterWrite [as oncomplete] (net.js:870:14)
このタイプのエラーを処理する適切な方法は何ですか?
PSリクエストがExpressで中止された後、エラーは発生しません
const fs = require('fs');
const express = require('express');
const app = express();
app.get('/', (req, res) => {
fs.createReadStream('really-large-file').pipe(res);
});
app.listen(4000);
私が試したPPS
app.use(async (ctx) => {
fs.createReadStream('really-large-file').pipe(ctx.res);
ctx.respond = false;
});
しかし、それは効果がありませんでした。
gloabelエラーハンドラーを使用します。https://github.com/koajs/koa/wiki/Error-Handlingを参照してください
const fs = require('fs');
const Koa = require('koa');
const app = new Koa();
app.use(async (ctx, next) => {
try {
await next();
} catch (err) {
ctx.status = err.status || 500;
ctx.body = err.message;
ctx.app.emit('error', err, ctx);
}
});
app.use(async (ctx) => {
ctx.body = await openFile();
});
function openFile(){
return new Promise((resolve,reject)=>{
var stream = fs.createReadStream("really-large-file")
var data
stream.on("error",err=>reject(err))
stream.on("data",chunk=>data+=chunk)
stream.on("end",()=>resolve(data))
})
}
app.listen(4000);
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加