Javascript 如何使用express http proxy修改响应头 背景

Javascript 如何使用express http proxy修改响应头 背景,javascript,node.js,express,http-headers,http-proxy,Javascript,Node.js,Express,Http Headers,Http Proxy,我使用代理我的SPA(单页应用程序)和CouchDB实例之间的少量请求。我是在每次调用的基础上做这个代理的,而不是创建代理服务器(这一点很重要) 当前使用的示例 app.use(`some/url`, proxy(dburl, { forwardPath: req => {return 'some/url'+require('url').parse(req.url).path;} }) ); 这意味着我没有使用httpProxy.createServer。我想发送一些文本数据片段以

我使用代理我的SPA(单页应用程序)和CouchDB实例之间的少量请求。我是在每次调用的基础上做这个代理的,而不是创建代理服务器(这一点很重要)

当前使用的示例

app.use(`some/url`, proxy(dburl, {
  forwardPath: req => {return 'some/url'+require('url').parse(req.url).path;}
 }) );
这意味着我没有使用
httpProxy.createServer
。我想发送一些文本数据片段以及作为标题的响应。在浏览了一遍之后,我得出结论,我想要的是使用
截取
。不幸的是,我还没有完全掌握如何使用它,到目前为止,我发现它似乎是基于
httpProxy.createServer
,这似乎(从我有限的理解来看)工作方式不同

我们使用单独的请求代理是因为我们希望将不同的请求代理给不同的微服务,并且发现这是最简洁的方法(我们当时知道)

问题 给定代码

const text = 'asdf';
app.use(`some/url`, proxy(dburl, {
  forwardPath: req => {return 'some/url'+require('url').parse(req.url).path;},
  intercept: function(rsp, data, req, res, callback) {
    //SUSPECT LOCATION
  }
}) );
可疑位置
是否有一些代码,允许我在标题上放置
文本
,以便最终响应,而不会进一步影响(当前正在工作的)代理

附加说明 一般来说,我对标题和网络请求不太熟悉,如果答案不言而喻,我深表歉意

链接到有助于解释使用此库进行代理、使用类似库进行代理的更精细之处的资源,或说明如何使用此库进行代理的底层技术的资源的额外点数。也就是说,我宁愿花自己的一些时间进一步研究这个问题,而不是回来问更多的问题


我不完全相信我的代码将放在可疑位置,如果它需要去其他地方,或者我们需要以不同的方式处理这个问题,我会很乐意倾听。

它遵循req、res对象上的express.js方法

在intercept函数体中,使用以下express格式设置响应头

res.set('hola', 'amigos!!!');
请参阅以下链接:

在没有文档的情况下理解库的最好方法是遵循它的测试套件。如果没有测试套件,不要使用该库

这是express http proxy intercept函数的测试套件

这是测试用例

it('can modify the response headers', function(done) {
  var app = express();
  app.use(proxy('httpbin.org', {
    intercept: function(rsp, data, req, res, cb) {
      res.set('x-wombat-alliance', 'mammels');
      res.set('content-type', 'wiki/wiki');
      cb(null, data);
    }
  }));

  request(app)
  .get('/ip')
  .end(function(err, res) {
    if (err) { return done(err); }
    assert(res.headers['content-type'] === 'wiki/wiki');
    assert(res.headers['x-wombat-alliance'] === 'mammels');
    done();
  });
});
如果您想取消代理的存取,最好的资源是haproxy


但在此之前,您需要更多地理解http(一个建设性的评论)

现在,公认的答案已经过时了。 拦截不再存在

相反,在代理函数之前使用自己的中间件

router.route('/my-route').get((req, res, next) => {
  res.set('My-Header', 'my-header-value');
  next();
}, proxyFunction);

不要忘记包含
cb(null,数据)根据测试用例。