Проблема
Если я не пропустил что-то, похоже, что вы совершаете простую ошибку, за которую собираетесь порвать себя.
Как правило,проблема CORS в приложении JavaScript может привести к ошибке CORS / предполетного запроса в консоли JavaScript вашего браузера.
Заблуждение
JavaScript, составляющийПриложение React загружается клиентом (т.е. вашими пользователями).После этого вызов выборки выполняется на клиентском компьютере .Запрос на выборку исходит не от сервера , а от удаленного конца .
. Он работает на вашем компьютере, поскольку размещены как React, так и Rail API.на вашем компьютере, поэтому localhost:3001
разрешается правильно.Однако на вашем компьютере пользователи приложение React пытается найти службу, работающую на порту 3001 на их компьютере.
Первоначальное решение
Вы должны указать React обратиться к IP-серверу, на котором размещен API, например:
getData = () => {
axios.get('http://192.168.2.70:3001/api/v1/pickup_deliveries')
.then((response) => {
this.setState({
apiData: response.data})
})
.catch((error)=>{console.log(error);});
}
Долгосрочное решение (для развертывания)
В будущем загляните в dotenv
, который позволит вам устанавливать переменные среды React.Вы можете иметь файл .env.local
и файл .env.production
.
В локальный файл вы можете поместить:
REACT_APP_BACKEND_SERVER=http://localhost:3001
, а в production
вы можете добавить:
REACT_APP_URL=http:/<server_ip>:3001
Затем в вашей программе:сделать что-то вроде:
getData = () => {
axios.get(process.env.REACT_APP_SERVER_URL + "/api/v1/pickup_deliveries")
.then((response) => {
this.setState({
apiData: response.data})
})
.catch((error)=>{console.log(error);});
}
Это автоматически разрешится до localhost
при обслуживании React с использованием npm run start
, а затем разрешится до <server_ip>
при обработке статических файлов, созданных с помощью npm run build
.
Не стесняйтесь комментировать этот ответ.Я был бы рад ответить на любые другие ваши вопросы.Добро пожаловать в Реакт!