您可以在webpack开发服务器中代理两个终结点相同的API吗?

时间:2019-02-06 15:17:23

标签: webpack-dev-server neutrino

我正在尝试建立一个系统来满足我们产品的新要求,我们在两个不同的端点上使用了相同的api。因此,我们首先通过调用https://testenv.com/api/createExperiment之类的东西在测试环境中创建它。然后将其移至实时运行,我们需要调用相同的api,但调用不同的主机,例如https://liveenv.com/api/createExperiment

为了模仿此代码进行测试和开发,我现在启动两个具有相同API的json服务器,一个在localhost:9000,另一个在localhost:9001

所以问题是使用webpack-dev-server能否代理/映射https://testenv.com/ -> localhost:9000https://liveenv.com/ -> localhost:9001(在所有人质疑我的理智之前,我认为服务器应该执行所有这一切,而不是客户端,但现在我们必须这样做,因为我们可以更快地完成工作。)

我可以使用proxy命令让一个代理工作,所以我有https://testenv.com/api -> https://localhost:9000。我尝试弄乱似乎与主机名有关的路由器选项,但它们不起作用。用一个简单的router: (req) => (console.log(req.headers);),来查看可用的资源,看来主机至少在本地并没有真正被使用。

let router = {};
if (process.env.JSON_SERVER) {
  proxyTarget = `https://localhost:${process.env.JSON_SERVER_PORT}`;
  router[getHostName(lineConfig.npApiUrl)] = `https://localhost:${parseInt(process.env.JSON_SERVER_PORT) + 1}`;
  router[getHostName(mgmtApiUrl)] = `https://localhost:${process.env.JSON_SERVER_PORT}`;
}

console.log(router);

return [
  '@neutrinojs/react',
  {
    html: {
      title: title,
      baseHref: resolveBaseName,
      config: JSON.stringify(config[line]),
      template: path.resolve(__dirname, './neutrino-html.ejs'),
    },
    devServer: {
      proxy: [{
        context: ['/v1', '/v2'],
        target: proxyTarget,
        secure: false,
        router,
        changeOrigin: false,
      }],
      historyApiFallback: {
        index: resolveBaseName,
      },
      port: devPort,
      open: false,
    },
    publicPath: resolveBaseName,
    env: ['BUILD_NUMBER'],
  },
]

},

0 个答案:

没有答案