получить запрос на маршрутизаторе экспресс-корня от реакции не работает - PullRequest
0 голосов
/ 28 июня 2018

Я пытаюсь вызвать экспресс-маршрутизатор ('/') из fetch api в режиме реакции в рабочем режиме, но он не работает.

Я использую общий сервер, так как использую представления реакции в виде статических файлов и выполняю рендеринг следующим образом:

if(process.env.NODE_ENV == 'production'){
    app.use(express.static(`${__dirname}/client/build`));
    app.get('*', (req, res) => {
        res.sendFile(path.join(__dirname+'/client/build/index.html'));
      });
    }

Кроме того, я уже пытался использовать имя рабочего узла в качестве маршрута в fetch, но это не работает для меня, так как я использую прокси.

Полная история в том, что я пытаюсь получить некоторые токены, которые я получаю от аутентификации oauth-прокси openshift. Есть два контейнера, один для прокси и другой для моего веб-приложения. Когда пользователь проходит аутентификацию, прокси-сервер отправляет токен на localhost: 8080 (это мое веб-приложение).

Я справляюсь с этим,

app.get('/', function (req, res) {
    if (req.headers !== undefined && req.headers['x-forwarded-access-token'] !== undefined && req.headers['x-forwarded-user'] != undefined) {

        userDetails.accessToken = req.headers['x-forwarded-access-token'];
        userDetails.username = req.headers['x-forwarded-user'];

        req.session.token = userDetails.accessToken;
        req.session.username = userDetails.username;

        res.send({ accessToken: userDetails.accessToken, username: userDetails.username});
    }  
});

Но когда я вызываю вышеупомянутый маршрутизатор из fetch api от реагирования, я не получаю ответ. Приложение вылетает.

Когда я запускаю его в среде разработки, я работаю как на разных серверах, так и когда я пишу его полностью, например 'fetch('http://localhost:3001')' тогда это работает.

Я хочу, чтобы он работал и на производстве. Любая помощь?

Подробнее

В целом я развернул свое приложение реагирования в openshift. Я использую oauth-proxy для аутентификации пользователя, а затем подключаюсь к моему приложению реагирования, когда прокси-сервер отправляет мне маркер аутентификации в приложении реагирования.

В модуле прокси-приложения есть два контейнера, прокси и веб-приложение. Когда я перехожу к маршруту модуля, он переходит на страницу входа в keycloak, где я ввожу свои учетные данные, после проверки подлинности прокси-сервер отправляет токен авторизации в заголовках в свой контейнер с коляской, который является моим веб-приложением (работает на localhost). : 8080 внутри модуля.) Прокси-сервер отправляет заголовки в localhost:8080/ (веб-приложение), которое является корнем веб-приложения. Теперь здесь я должен сделать запрос на выборку от клиента к этому маршруту и ​​получить токен (чего я не могу, так как он не работает таким образом, вероятно, потому что я использую прокси, который работает на другом хосте, чем мой веб приложение). Но когда я делаю запрос на других маршрутах, таких как ('/ api / xyz'), это работает как шарм. Что-то с корневым маршрутом и прокси-сервером создает проблему.

1 Ответ

0 голосов
/ 01 июля 2018

Это сработало, когда я добавил Cors в свой код реакции. У меня было это в моем коде сервера, но не на реакции.

fetch('/auth', {
  credentials: 'include',
  mode: 'cors'
})
...