MERN API GET-запросы возвращают 404-е на Heroku, работает на локальном сервере Raspi - PullRequest
0 голосов
/ 16 марта 2019

У меня есть приложение MERN, которое я пытаюсь разместить на Heroku. Прямо сейчас приложение развертывается на Raspberry Pi, и там все работает нормально, но как только оно попадает в Heroku, все мои запросы API GET приводят к 404 ошибкам. Я могу получить интерфейс React, но больше ничего не работает. Часть Mongo размещена на уровне песочницы Atlas и помещена в белый список для принятия любых авторизованных соединений.

Вещи, которые я пробовал:

const axiosConfig = {
  proxy:{
    host: '127.0.0.1',
    port: process.env.PORT || 3001
  }
};

GET запросы в моем API приводят к 404 на Heroku со следующим сообщением об ошибке: xhr.js:173 GET https://builders-kit-0031.herokuapp.com/api/humidity 404 (Not Found).

Я аутентифицируюсь в Atlas с помощью файла ключей:

if(process.env.NODE_ENV === 'production'){
  module.exports = require('./keys_prod');
} else {
  module.exports = require('./keys_dev');
}

Этот файл извлекает следующий файл, в котором используются строки MONGO_URI и SECRET_OR_KEY, которые я установил в разделе конфигурации vars Heroku.

module.exports = {
  mongoURI: process.env.MONGO_URI,
  secretOrKey: process.env.SECRET_OR_KEY
};

Мой код настроен для обслуживания React через сервер Express (все вещи реагируют в папке /client). В настоящее время я выполняю развертывание со скриптом пост-сборки Heroku, например:

Я думаю, что это все те самые горячие точки, которые я обнаружил с тех пор, как исследовал это здесь сегодня утром. Любой совет о том, что попробовать, будет принята с благодарностью. Вы можете проверить сломанную версию того, что я пытаюсь развернуть здесь . Рад опубликовать любые другие фрагменты кода, если это поможет отладке - не хотел публиковать все приложение. Заранее спасибо!

1 Ответ

0 голосов
/ 17 марта 2019

Хорошо, думаю, я понял, что здесь происходит.Похоже, это связано с тем, как baseURL настроен в Axios.

Во время локальной разработки я допустил ошибку, присвоив IP-переменную, а затем совершил любые вызовы API следующим образом: ${ip}/api/whatever/whatever

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

const axiosInstance = axios.create({
  baseURL: 'http://localhost:5000'
});

Я переключил все свои вызовы API, чтобы ссылаться на этот axiosInstance, а не просто axios, и затем обновил ихвсе использовать относительные URL.Все вызовы API и соединения с БД работают, как и ожидалось, на стадии подготовки.Надеюсь, это поможет кому-то в будущем!

...