Как лучше всего выполнять вызовы моего собственного API на сервере живого узла? - PullRequest
0 голосов
/ 22 марта 2019

Я сделал веб-приложение с простым API.Код для интерфейса и API и оба обслуживаются с одного хоста.Внешний интерфейс использует API путем выполнения базовых http-запросов.При разработке я делал эти запросы во внешнем интерфейсе, используя порт 3000 с локально запущенного сервера.

Каков наилучший способ сделать это на рабочем сервере (экземпляр AWS EC2)?

Как мне легко обобщить это в коде разработки, чтобы мне не пришлось его менятьс

axios.get("localhost:3000" + otherParams)
        .then(response => {

          //use the response to do things

          });
        })

до

axios.get("http://99.999.999.999:80" + otherParams)
        .then(response => {

          //use the response to do things

          });
        })

каждый раз, когда я отправляю обновление на действующий сервер?Это что-то, с чем приходится мириться веб-разработчикам?Извините, если это глупый вопрос ..

Ответы [ 2 ]

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

Нам определенно не нужно мириться с изменением нашего кода каждый раз!(Спасибо богам кодирования)

Так что я думаю, что вы ищете переменные окружения

Например: вы можете установить переменную окружения с именем SERVER_URL

Тогда, когда вы работаете локально, эта переменная равна localhost:3000, но при развертывании в amazon ее можно установить равной http://99.999.999.999:80

в узле, вы используете переменную, подобную этой

process.env.WHATEVER_YOUR_VARIABLE_NAME_IS

Так что в вашем случае это будет axios.get(process.env.SERVER_URL + otherParams)

. Популярный модуль для создания этих переменных - dotenv , на который стоит обратить внимание.

В качестве небольшого бонуса, чтобы помочь (и, надеюсь, не слишком вас смущает), axios позволяет вам создать свой собственный экземпляр axios , чтобы вам не приходилось повторяться.Их пример:

const instance = axios.create({
  baseURL: 'https://some-domain.com/api/',
  timeout: 1000,
  headers: {'X-Custom-Header': 'foobar'}
});

Таким образом, вы можете сделать что-то вроде

const api = axios.create({
  baseURL: process.env.SERVER_URL
});

, тогда вы можете заменить свои axios вызовы новым экземпляром axios (api)

Примерно так.

api.get(otherParams)

Надеюсь, что это имеет какой-то смысл и возвращает вас в нужное русло!

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

Вы можете создать файл config.js:

var configs = {};
configs.appPort = 3000;
configs.host = '192.168.99.100';
module.exports = configs;

Импорт файла конфигурации:

var configs = require('./config');

Axios:

axios.get(configs.host + ":" + configs.appPort + "/" + otherParams)
        .then(response => {

          //use the response to do things

          });
        })

Вы также можете создатьПеременные окружения, такие как:

configs.isProduction = false;
configs.localHost = "localhost";
configs.productionHost = "192.168.99.100";

И тогда вы можете проверить в своем приложении, является ли оно рабочим, используйте productionHost, в противном случае используйте localHost.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...