Я запускаю прокси-сервер разработки, где при запуске я делаю запрос на токен аутентификации с нашей кластерной архитектурой.
Однако срок действия этого токена истекает через некоторое время. Затем вместо того, чтобы разработчик перезапускал свой прокси-сервер, я хотел бы сделать еще один запрос, чтобы получить другой действительный токен аутентификации. Чтобы иметь возможность обрабатывать ответ самостоятельно, я установил для параметра node-http-proxy
selfHandleResponse
значение true.
app.use(
'/',
index({
target: config.hostname,
changeOrigin: true,
onProxyReq,
onProxyRes,
selfHandleResponse: true
})
);
Теперь я хочу обрабатывать ответы только с 401
, потому что это единственный случай, когда мне нужно запросить другой токен.
const onProxyRes = (proxyRes, req, res) => {
if (proxyRes.statusCode === 401) {
getToken()
.then(forwardRequest(req))
.then((response) => {
res.send(response.body);
})
.catch(() => {
res.sendStatus(500);
});
}
// How to pass back the original proxyRes including body, headers etc.?
});
Обновлено: forwardRequest - это моя функция, чтобы повторить исходный запрос, а затем передать его клиенту в случае успеха.
Мои проблемы начинаются здесь, так как я понятия не имею, как передать проксированный запрос не-401 обратно клиенту. Я обнаружил, что начинаю реализовывать логику синтаксического анализа тела в зависимости от типа содержимого заголовка, но я очень надеюсь, что есть более простой способ.
Есть идеи?
Решение простое...
proxyRes.pipe(res);
Найдено в исходном коде node-http-proxy
.
Не могли бы вы поделиться, как выглядит ваша функция
forwardRequest
? Может облегчить людям, спотыкающимся о ту же проблему.