koa
我的项目使用Koa框架,我正在寻找一种方法来取代Express的res.write,以将大型数据集流式传输到csv。
我可以使用koa-write执行此操作吗?类似于:
var write = require('koa-write');
router.get('/', (ctx, next) => {
ctx.response.set('Content-Type', 'text/csv');
ctx.response.set('Content-Disposition', 'attachment; filename=data.csv');
write(ctx, "1,2,3,4,5\n");
});
我尝试过,但是似乎没有用。
回答如下:您可以创建一个可读流并分配给ctx.body
const Koa = require("koa");
const { Readable } = require("stream");
const app = new Koa();
const s = new Readable();
app.use((ctx) => {
if (ctx.request.url === "/") {
ctx.body = s;
s.push('"1,2,3,4,5\n');
s.push("test test");
s.push(null); // indicates end of the stream
} else {
ctx.throw(404);
}
});
app.listen(8080);
或者如果您已经有了视频流,只需分配给正文。否则,请创建一个新的Stream并将数据推送到其中。使用null
koa
我的项目使用Koa框架,我正在寻找一种方法来取代Express的res.write,以将大型数据集流式传输到csv。
我可以使用koa-write执行此操作吗?类似于:
var write = require('koa-write');
router.get('/', (ctx, next) => {
ctx.response.set('Content-Type', 'text/csv');
ctx.response.set('Content-Disposition', 'attachment; filename=data.csv');
write(ctx, "1,2,3,4,5\n");
});
我尝试过,但是似乎没有用。
回答如下:您可以创建一个可读流并分配给ctx.body
const Koa = require("koa");
const { Readable } = require("stream");
const app = new Koa();
const s = new Readable();
app.use((ctx) => {
if (ctx.request.url === "/") {
ctx.body = s;
s.push('"1,2,3,4,5\n');
s.push("test test");
s.push(null); // indicates end of the stream
} else {
ctx.throw(404);
}
});
app.listen(8080);
或者如果您已经有了视频流,只需分配给正文。否则,请创建一个新的Stream并将数据推送到其中。使用null