Использование разных URL-адресов API для разработки и производства с React и Axios
Я создаю веб-приложение с интерфейсом React и Node.js (API).
В интерфейсе React я вызываю методы API следующим образом:
axios({
method: 'post',
url: 'http://servername:9999/reports.activities',
data: {
user_id: 1
}
}).then(res => {
this.setState(res.data);
});
Иногда мне нужно протестировать методы API, которые еще не выпущены в производство.
Когда я тестирую бэкэнд локально, я запускаю nodemon api.js
на localhost:9999
,
Каждый раз, когда я хочу протестировать интерфейс с локально работающим API, я должен изменить http://servername:9999
в http://localhost:9999
в моем коде внешнего интерфейса.
Я думаю, что это не правильный подход.
Каков наилучший способ использовать разные URL для разработки (при запуске npm start
локально) и производство (npm build
)?
Я думал об использовании dotenv для этой цели. Это правильный подход?
Какова лучшая практика?
3 ответа
Если вы используете приложение create-реагировать, у вас уже установлен dotenv.
Так что вы можете так:
const API_ENDPOINT = process.env.REACT_APP_API_ENDPOINT || 'http://production';
...
url: `${API_ENDPOINT}/reports.activities`
Вы можете создать 2
.env
файлы, называемые и.
//.env.development
REACT_APP_API_ENDPOINT=http://localhost:9999
//.env.production
REACT_APP_API_ENDPOINT=https://servername:9999
Затем используйте его следующим образом -
//api.js
const API_ENDPOINT = process.env.REACT_APP_API_ENDPOINT
axios({
method: 'post',
url: `${API_ENDPOINT}/reports.activities`,
data: {
user_id: 1
}
}).then(res => {
this.setState(res.data);
});
Как это работает: когда вы бежите
npm start
, response будет использовать
.env.development
файл и когда вы это сделаете
npm run build
, response будет использовать
.env.production
файл.
Вот соответствующая часть документации .
Если вы перейдете на vite, вы можете использовать. По умолчанию vite предоставляет все переменные env, начинающиеся с VITE_.
import.meta.VITE_SOME