首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何访问koa.js中的响应

如何访问koa.js中的响应
EN

Stack Overflow用户
提问于 2019-01-15 03:36:29
回答 1查看 536关注 0票数 1

我想用koa.js重写一个长轮询聊天(比如here)。但我遇到了一个问题:

代码语言:javascript
复制
const app = new Koa();
const router = new Router();

router.get('/', homePage)
.get('/subscribe', subscribe)
.post('/publish', publish)

app
.use(router.routes())
.listen(3000);

我不能在下一部分代码中访问ctx.response。我需要它来将对象推送到客户端的数组中,然后在'publish‘方法(node js version)中调用response.end()。

代码语言:javascript
复制
subscribe = (ctx, next) => {
  clients.push(ctx.res);
  ctx.res.on('close', () => {
    clients.splice(clients.indexOf(response), 1);
  });
};
EN

回答 1

Stack Overflow用户

发布于 2019-01-15 03:43:45

Koa中间件(和路由)使用promises。如果promise解析,则认为路由“完成”,并将响应发送到客户端。

如果您没有返回promise (或使用异步函数),则认为中间件会立即执行并结束。当你调用ctx.res.end()的时候,基本上已经太晚了。

那么,如何告诉koa不要自动结束请求呢?您可以通过发送稍后解决的承诺来做到这一点。

下面是一个中间件的例子,它发回一个永远不会解决的承诺:

代码语言:javascript
复制
const myMw = ctx => {
  return new Promise( () => {});
}

假设您正在从express迁移到koa (很好的选择!)您不应该尝试完全采用express中完全相同的模式。长轮询非常适合promise-first解决方案。

我强烈建议你在任何事情上都使用promises。如果一个客户‘发布’一条消息给每个其他客户,它应该会导致一堆承诺的解析。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54188045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档