我正在开发一个应用程序(使用Connect 而不是Express),该应用程序由一组中间件和节点-http-代理模块组成,也就是说,我有一个中间件链,如下所示:
midA -> midB -> http-proxy -> midC 在这个场景中,响应是由http代理编写的,它将请求代理到某个目标并返回内容。
我想创建一个中间件(比如midB)作为缓存。这样做的目的是:
如何才能做到这一点?还是有别的办法?
干杯
发布于 2015-08-07 12:08:47
回答我自己。如果您有像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);
}
...
}任何其他解决方案将不胜感激。
https://stackoverflow.com/questions/31851894
复制相似问题