Как дублировать и пересылать запрос с помощью маршрутизатора koa

#node.js #koa #koa-router

#node.js #koa #koa-маршрутизатор

Вопрос:

По нескольким причинам у меня есть сервер, который должен пересылать запросы на другой сервер. Ответ должен быть ответом конечного сервера. Мне также нужно добавить дополнительный заголовок в запрос, но снова удалить этот заголовок из ответа перед возвратом. Таким образом, перенаправление не собирается его сокращать.

В настоящее время я делаю это вручную, копируя заголовки и тело по мере необходимости, но я хотел бы знать, есть ли простой общий способ сделать это?

Ответ №1:

Для этого подойдет прокси. Предполагая, что @koa / router или что-то похожее и модуль http-прокси (есть также модули-оболочки для Koa, которые могут работать:

 const proxy = httpProxy.createProxyServer({
  target: 'https://some-other-server.com',
  // other options, see https://www.npmjs.com/package/http-proxy
})
proxy.on('proxyReq', (proxyReq, req, res, options) => {
  proxyReq.setHeader('x-foo', 'bar')
})
proxy.on('proxyRes', (proxyRes, req, res) => {
  proxyRes.removeHeader('x-foo')
})

router.get('/foo', async (ctx) => {
  // ctx.req and ctx.res are the Node req and res, not Koa objects
  proxy.web(ctx.req, ctx.res, {
    // other options, see docs
  })
})
 

Вы также можете удалить прокси из маршрута, если вы запускаете свой сервер Koa с http.createServer , а не app.listen :

 // where app = new Koa()
const handler = app.callback()
http.createServer((req, res) => {
  if (req.url === '/foo') {
    return proxy.web(req, res, options)
  }

  return handler(req, res)
})