如何使用 koa 生成缓慢的响应?
How can I generate a slow response using koa?
当 运行 koa 我收到以下警告:
deprecated Support for generators will be removed in v3
我的代码所做的是创建一个缓慢的响应。例如。每 1 秒写入响应,持续 30 秒。
(new Koa()).use(function *(){
const tr = through();
setInterval(() => tr.write('blabla\n'), 1000);
setTimeout(tr.end, 30000);
this.type = 'text';
this.body = tr;
}).listen(3003, () => console.log('Listen 3003: slow response'));
curl http://localhost:3003
HTTP/1.1 200 行
内容类型:text/plain;字符集=utf-8
日期:2019 年 2 月 27 日星期三 21:17:06 GMT
连接:保持活动
传输编码:分块
blabla
布拉布拉
布拉布拉
布拉布拉
...
注意:消息是一条一条打印的。
如何使用 v3 方式实现上述目标?
需要说明的是,v3 尚未发布,这只是一个弃用警告,表明 Koa 正在远离生成器函数。您没有使用 yield
,因此转换它很容易:
const Koa = require('koa');
const through = require('through');
(new Koa()).use((ctx) => {
const tr = through();
setInterval(() => tr.write('blabla\n'), 1000);
setTimeout(tr.end, 30000);
ctx.type = 'text';
ctx.body = tr;
}).listen(3003, () => console.log('Listen 3003: slow response'));
将生成器函数替换为有参数的正则函数或箭头函数ctx
将this
替换为ctx
编辑:此外,我认为此代码存在错误。您正在为每个请求创建一个新的间隔,但从不清除它们。我认为这将被视为内存泄漏。
你可能应该做更多这样的事情:
const Koa = require('koa');
const through = require('through');
(new Koa()).use((ctx) => {
const tr = through();
let intervalId = setInterval(() => tr.write('blabla\n'), 1000);
setTimeout(end(intervalId, tr), 30000);
ctx.type = 'text';
ctx.body = tr;
}).listen(3003, () => console.log('Listen 3003: slow response'));
function end(intervalId, tr) {
return () => {
clearInterval(intervalId);
tr.end();
}
}
当 运行 koa 我收到以下警告:
deprecated Support for generators will be removed in v3
我的代码所做的是创建一个缓慢的响应。例如。每 1 秒写入响应,持续 30 秒。
(new Koa()).use(function *(){
const tr = through();
setInterval(() => tr.write('blabla\n'), 1000);
setTimeout(tr.end, 30000);
this.type = 'text';
this.body = tr;
}).listen(3003, () => console.log('Listen 3003: slow response'));
curl http://localhost:3003
HTTP/1.1 200 行
内容类型:text/plain;字符集=utf-8
日期:2019 年 2 月 27 日星期三 21:17:06 GMT
连接:保持活动
传输编码:分块
blabla
布拉布拉
布拉布拉
布拉布拉
...
注意:消息是一条一条打印的。
如何使用 v3 方式实现上述目标?
需要说明的是,v3 尚未发布,这只是一个弃用警告,表明 Koa 正在远离生成器函数。您没有使用 yield
,因此转换它很容易:
const Koa = require('koa');
const through = require('through');
(new Koa()).use((ctx) => {
const tr = through();
setInterval(() => tr.write('blabla\n'), 1000);
setTimeout(tr.end, 30000);
ctx.type = 'text';
ctx.body = tr;
}).listen(3003, () => console.log('Listen 3003: slow response'));
将生成器函数替换为有参数的正则函数或箭头函数
ctx
将
this
替换为ctx
编辑:此外,我认为此代码存在错误。您正在为每个请求创建一个新的间隔,但从不清除它们。我认为这将被视为内存泄漏。
你可能应该做更多这样的事情:
const Koa = require('koa');
const through = require('through');
(new Koa()).use((ctx) => {
const tr = through();
let intervalId = setInterval(() => tr.write('blabla\n'), 1000);
setTimeout(end(intervalId, tr), 30000);
ctx.type = 'text';
ctx.body = tr;
}).listen(3003, () => console.log('Listen 3003: slow response'));
function end(intervalId, tr) {
return () => {
clearInterval(intervalId);
tr.end();
}
}