Можете ли вы прокси двух конечных точек одного и того же API в веб-сервере разработчиков?
Я пытаюсь настроить систему для удовлетворения новых требований к нашему продукту, когда мы используем один и тот же API-интерфейс на двух разных конечных точках. Итак, мы начинаем с создания его в тестовой среде, вызывая что-то вроде https://testenv.com/api/createExperiment
, Затем, чтобы перевести его в режим реального времени, нам нужно вызвать тот же API, но другой хост, так https://liveenv.com/api/createExperiment
,
Чтобы имитировать это для тестирования и разработки, я теперь запускаю два json-сервера с одним и тем же API, один на localhost:9000
и другой в localhost:9001
,
Так что вопрос использования webpack-dev-server мы можем прокси / карту https://testenv.com/ -> localhost:9000
а также https://liveenv.com/ -> localhost:9001
(И прежде чем все усомнятся в моем здравомыслии, я утверждал, что сервер должен делать все это, а не клиент, но теперь мы должны это делать, потому что мы быстрее выполняем свою работу.)
Я могу заставить один прокси работать, используя команду прокси, поэтому у меня есть 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'],
},
]
},