следующий JS + ExpressJS с обратным прокси Apache приводит к "неопределенному" в URL - PullRequest
0 голосов
/ 31 марта 2020

Я пытаюсь настроить следующий JS + ExpressJS сайт на Apache. У меня есть обратный прокси, который перенаправляет любой запрос на http://1.23.45.67 (мой ip на порту 80) на localhost:3000, где работает мой сервер nodejs. Когда я поднимаю сайт в браузере, все выглядит нормально. Images / css загружается правильно, и я могу перемещаться по сайту, но всякий раз, когда к бэкэнду делается запрос ajax (например, вызов API для регистрации пользователя), он делает это с URL-адресом запроса http://1.23.45.67/undefined/api/v1/users/register.

Мой виртуальный хост apache config выглядит как

<VirtualHost *:80>
    ServerName www.myservername.com
    ServerAlias myservername.com
    DocumentRoot /var/www/myapp/html
    ErrorLog /var/www/myapp/log/error.log
    CustomLog /var/www/myapp/log/requests.log combined

    ProxyRequests on
    ProxyPass / http://localhost:3000/
    ProxyPassReverse / http://localhost:3000/
</VirtualHost>

Я генерирую ajax URL-адрес запроса, используя переменную base url из файла .env. Я также пробовал http://localhost/ и http://localhost:3000/ как BASE_URL

# simplified .env file
...
BASE_URL=http://1.23.45.67/
...
# simplified register page where we make the ajax request.
...
fetch(`${process.env.BASE_URL}/api/v1/users/register`, {method: 'GET'});
...

1 Ответ

0 голосов
/ 01 апреля 2020

Для тех, кто сталкивается с этим ... Это не проблема с apache config. Вопрос в том, как я использую dotenv в следующем js. Следующий мой проект js захватывает переменные .env во время сборки, а не во время выполнения. .Env не существует, когда мое действие github компилируется и отправляет мой код на сервер, поэтому я получаю "undefined" в URL. Я считаю, что publicRuntimeConfig из Next JS - это решение. Все переменные .env, используемые во внешнем интерфейсе, необходимо добавить как переменные publicRuntimeConfig, если вы хотите, чтобы их захватывали во время выполнения, а не во время сборки. https://nextjs.org/docs/api-reference/next.config.js/runtime-configuration

...