У меня есть приложение AngularJS, которое ведет переговоры с бэкэндом NodeJS. Недавно я просто был жестко закодирован в API-интерфейсе в моем интерфейсе, поскольку только одна среда (то есть моя среда разработки была такой же, как и моя производственная среда).Подключиться к конкретному API на основе среды
Однако, по мере расширения проекта, у меня теперь есть три среды: разработка, постановка и производство.
Мои среды разработки и промежуточного уровня общаются с одним и тем же API (скажем, dev.fooapi.com), но моя производственная среда должна разговаривать с другим API (скажем, prod.fooapi.com).
Мой вопрос: какие-то «изящные» (я помещал это в кавычки, потому что кто должен сказать, что является изящным, а что нет) способами достижения этого в моем приложении? В настоящее время у меня есть строковый заполнитель в моих исходных файлах, который выглядит как «API_PLACEHOLDER» и задача Grunt, которая выполняет замену строки где-нибудь в моей кодовой базе, где она соответствует этой строке. Очевидно, что это не идеально, потому что файлы, в которых эти замещающие элементы заменены, контролируются с помощью источника, и я действительно не хочу выполнять замену строки, а затем случайно совершать некоторый код с жестко закодированными адресами API разработчика, поскольку это будет нарушено.
Дополнительная информация: Я использую Grunt в своем приложении, я развертываю в Windows (не могу быть изменен, к сожалению), я использую Git для управления исходным кодом, и я делаю сборку/развертывание с помощью Bamboo.
Более чем рады ответить на любые другие вопросы о моей проблеме.
Примечание: Мне нужно заменить значения конфигурации не только для моего переднего конца, но и задний конец (то есть, когда я начинаю свой сервер узла Я хочу, чтобы порт, он начинает на конфигурироваться
Благодаря
.!
Переменная окружения в фоновом контингенте может сообщить серверу, какую переменную Javascript добавить в каждую страницу, чтобы интерфейс мог использовать что переменная JS должна знать, какое имя DNS-сервера использовать. Или вы можете закодировать front-end для проверки такой переменной и, если ее не найти, она будет использовать производственную среду. Если он найден, он будет использовать все, что есть. – jfriend00
@ jfriend00 - как интерфейс знает, что такое переменная среды на заднем конце? Мне кажется, что проблема с курицей и яйцом. –
Если вы читаете снова, я сказал, что back-end помещает переменную JS на каждую страницу, которая указывает, что использовать. Поскольку переменная JS находится на странице, она доступна для интерфейсного JS. – jfriend00