Heroku добавляет undefined в переменную окружения BASE_URL

пытаюсь развернуть приложение vuejs, express на heroku. Приложение отображается, но не может получить доступ к api, потому что кажется, что heroku добавляет undefined в середине base_url. Все работает локально как положено.

Вот мой вариант конфигурации heroku: BASE_URL: https://goore-todos.herokuapp.com/

Вот запрос api компонента Vuejs:

fetchTodo () {
  let uri = process.env.BASE_URL + '/api/all';
  axios.get(uri).then((response) => {
    this.todos = response.data;
  });
},

Как уже упоминалось, это работает локально.

консоль показывает следующую ошибку: VM71: 1 ПОЛУЧИТЕ https://goore-todos.herokuapp.com/undefined/api/all 404 (не найдено)

и вид пуст.

запросы к https://goore-todos.herokuapp.com/api/ через работу почтальона как и ожидалось.


person user2799827    schedule 20.05.2019    source источник


Ответы (1)


В этом случае похоже, что process.env.BASE_URL не определен. Поскольку он не определен, URL-адрес, к которому вы пытаетесь получить доступ, считается относительным. Это означает, что он использует ваш текущий домен и добавляет к нему путь.

Если ваш интерфейс и серверная часть работают в одном домене, нет причин пытаться передать URL-адрес API в качестве переменной, поскольку вы можете просто использовать относительные URL-адреса.

Если вы хотите получить доступ к URL-адресу через переменную среды, это немного сложнее с приложением внешнего интерфейса. Приложение Vue работает в браузере пользователя, а не на вашем сервере, поэтому вы не можете получить к нему прямой доступ.

person Lassi Uosukainen    schedule 20.05.2019
comment
Использование относительных URL-адресов работает. Спасибо! Мне все еще интересно, как process.env.BASE_URL не определен, когда он установлен в heroku и когда он работает в локальной среде при чтении из .env - person user2799827; 20.05.2019
comment
@ user2799827 обычно переменные среды для интерфейсных приложений необходимо указывать при создании приложения. Когда ваше приложение находится в чужом браузере, конечно, оно не может прочитать переменную среды с вашего сервера. - person Lassi Uosukainen; 20.05.2019
comment
@ user27 Некоторые приложения JavaScript используют только переменные среды во время компиляции, вы можете перезапустить развертывание приложения - person Ferrybig; 20.05.2019