中间件的NodeJS如何从一个写流读取(http.ServerResponse)(NodeJS mi

2019-11-03 23:21发布

我在一个应用程序的工作(使用连接不表达 )的一组中间件以及节点的HTTP代理模块组成,也就是说,我有一个像中间件链:

midA -> midB -> http-proxy -> midC 

在这种情况下,响应由HTTP代理来代理请求一些目标,并返回内容写道。

我想创建一个中间件(说midB )作为高速缓存。 我们的想法是:

  • 如果URL缓存缓存中间件写入响应,避免继续middleares链。
  • 如果URL没有被缓存在高速缓存中间件经过中间件链位内的请求需要读取的最终响应的内容被高速缓存。

如何才能做到这一点? 或者还有另一种方法?

干杯

Answer 1:

回答自己。 如果你有一个像中间件function(req, res, next){..}需要读取响应对象的内容。

在这种情况下, res是一个http.ServerResponse对象,其中链中的每个中间件可以写,这将符合我们想要返回的响应内容写流。

不要用你做出一个请求时,响应混淆http.request()这是一个http.IncomingMessage这实际上是一个可读的流。

的方式,我发现阅读所有中间件写入响应正在重新定义内容write方法:

var middleare = function(req, res, next) {

  var data = "";
  res._oldWrite = res.write;
  res.write = function(chunk, encoding, cb) {
    data += chunck;
    return res._oldWrite.call(res, chunck, encoding, cb);
  }

  ...
}

任何其他解决方案将不胜感激。



文章来源: NodeJS middleware how to read from a writable stream (http.ServerResponse)