next-http-proxy-middleware icon indicating copy to clipboard operation
next-http-proxy-middleware copied to clipboard

httpProxyMiddleware chaining with multipel targets

Open wansiedler opened this issue 3 years ago • 1 comments

It would be great to have the possibility to chain proxy middlewares like this: httpProxyMiddleware(req, res, { target: process.env.target1, pathRewrite: [{ patternStr: "^/api", replaceStr: "", }], }).than((response)=>httpProxyMiddleware(req, response, { target: process.env.target2, pathRewrite: [{ patternStr: "^/s3", replaceStr: "", }], })) What is the proper way of doing this?

wansiedler avatar Dec 22 '21 18:12 wansiedler

Hi @wansiedler It seems to be possible to use multiple targets by implementing it like the code below.

export default (req: NextApiRequest, res: NextApiResponse) => {
  const proxyOptions = [{
      target: 'https://www.example1.com',
      pathRewrite: [{
        patternStr: '^/api/new',
        replaceStr: '/v2'
      }, {
        patternStr: '^/api',
        replaceStr: ''
      }],
    },{
      target: 'https://www.example2.com',
      pathRewrite: [{
        patternStr: '^/api/new',
        replaceStr: '/v2'
      }, {
        patternStr: '^/api',
        replaceStr: ''
      }],
    }];

  const proxyOption = proxyOptions.find(({pathRewrite}) => {
    return pathRewrite.some(({patternStr}) => RegExp(patternStr).test(req?.url))
  })

  if(proxyOption) {
    return httpProxyMiddleware(req, res, proxyOption)
  } else {
    return res.status(404).send(null);
  }
};

Thanks :)

stegano avatar Dec 23 '21 01:12 stegano