NodeJS中间件如何从可写流中读取(http.ServerResponse)

时间:2015-08-06 09:26:25

标签: node.js caching middleware

我正在开发一个应用程序(使用Connect not Express ),该应用程序由一组中间件和node-http-proxy模块组成,也就是说,我有一系列中间件,如:

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

在这种情况下,响应由http代理写入,代理将请求代理到某个目标并返回内容。

我想创建一个中间件(比如midB)来充当缓存。这个想法是:

  • 如果缓存了url,缓存中间件会写入响应并避免继续使用中间链。
  • 如果没有缓存url,缓存中间件会在中间件链中传递请求,需要读取要缓存的最终响应内容。

怎么能实现这个目标?还是有另一种方法?

干杯

1 个答案:

答案 0 :(得分:0)

回答自己。 如果你有像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); } ... } 方法:

RuntimeException

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