【问题标题】:Koa - issue internal requestKoa - 发出内部请求
【发布时间】:2016-11-17 21:27:36
【问题描述】:

我们正在使用 Koa 创建一个 REST 服务。

我想做的一件事是使用自定义请求对象从中间件调用内部 API,并在将响应提供给真实客户端之前对其进行解析。

如果这有点难以理解,请考虑以下伪代码:

var myMiddleware = function(ctx, next) {

   var fakeSubRequest = new Koa.Request('GET', '/some-internal-path');
   var fakeSubResponse = yield koa.internalRequest(fakeSubRequest);

   ctx.body = someTransformation(fakeSubResponse.body); 

}

这完全是虚构的。我的意思是我想通过创建一个新请求并接收一个新响应来在我的应用程序中“模拟”一个请求,然后我可以使用它来构建我的实际响应。

我不想直接调用我的路由和/或中间件。我希望它通过路由器,因为它必须在服务器范围内工作。

是否可以模拟内部请求而无需在 localhost 上进行真正的 HTTP 请求?

【问题讨论】:

  • 我想创建一个对 localhost 的请求是最好的选择。因为中间件的逻辑大多依赖 NodeJs 的 HTTP req/res 对象(this.req、this.res),这些对象不是 Koa 创建的,而是 NodeJs 交给 Koa 的。即使你调用你的路由器,你仍然需要创建 HTTP req/res 对象并将其传递给它。
  • @zeronone 必须调用 TCP 网络堆栈将对性能造成重大影响。是不是不能创建nodejs请求和响应对象?

标签: javascript node.js koa


【解决方案1】:

几年后,我有了答案。

最好的方法是从头开始创建一个新的 Context 对象并尝试“模拟”Node.js IncomingMessage 和 ServerResponse 对象。

这并不容易,而且有点 hack,但这是 Koa 现在需要的。我最终启动了a new Koa-inspired framework,它做得更好。

【讨论】:

    猜你喜欢
    • 2020-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-08
    • 1970-01-01
    • 2022-10-06
    相关资源
    最近更新 更多