节点 - express-http-proxy - 在代理之前设置标头

Mar*_*oLe 5 proxy http node.js express

在我代理到一个地址之前,我想设置代理的标头(就像拦截器一样)。我使用 express-http-library 并用 Node.JS 表达。到目前为止,我的代码如下所示。顺便提一句。这个图书馆的文档并没有让我变得更聪明。

app.use('/v1/*', proxy('velodrome.usefixie.com', {
userResHeaderDecorator(headers, userReq, userRes, proxyReq, proxyRes) {
    // recieves an Object of headers, returns an Object of headers.
    headers = {
        Host: 'api.clashofclans.com',
        'Proxy-Authorization': `Basic ${new Buffer('token').toString('base64')}`
    };
    console.log(headers);

    return headers;
}
Run Code Online (Sandbox Code Playgroud)

}));

即使控制台将标题 obj 打印出来。正如预期的那样,代理授权不起作用:

{ Host: 'api.clashofclans.com',
  'Proxy-Authorization': 'Basic token' }
Run Code Online (Sandbox Code Playgroud)

谁能帮我吗?

Chr*_*non 7

express-http-proxy允许您通过以下方式传入选项对象(与request库中使用的对象相同)proxyReqOptDecorator

app.use("/proxy", proxy("https://target.io/api", {
  proxyReqOptDecorator: function (proxyReqOpts, srcReq) {
    proxyReqOpts.headers = {"Authorization": "Bearer token"};
    return proxyReqOpts;
  }
}));

Run Code Online (Sandbox Code Playgroud)

或者

app.use("/proxy", proxy("https://target.io/api", {
  proxyReqOptDecorator: function (proxyReqOpts, srcReq) {
    proxyReqOpts.auth = `${username}:${password}`;
    return proxyReqOpts;
  }
}));
Run Code Online (Sandbox Code Playgroud)

的文档proxyReqOptDecorator可以在这里找到


rue*_*uel 1

如果您需要做的只是添加一些中间件来更改某些标头,那么您应该能够执行以下操作:

app.use('/v1/*', (req, res, next) => {
    req.headers['Proxy-Authorization'] = `Basic ${new Buffer('token').toString('base64')}`;
    next();
});
Run Code Online (Sandbox Code Playgroud)