2016-03-10 2 views
0

У меня есть приложение AngularJS, которое ведет переговоры с бэкэндом NodeJS. Недавно я просто был жестко закодирован в API-интерфейсе в моем интерфейсе, поскольку только одна среда (то есть моя среда разработки была такой же, как и моя производственная среда).Подключиться к конкретному API на основе среды

Однако, по мере расширения проекта, у меня теперь есть три среды: разработка, постановка и производство.

Мои среды разработки и промежуточного уровня общаются с одним и тем же API (скажем, dev.fooapi.com), но моя производственная среда должна разговаривать с другим API (скажем, prod.fooapi.com).

Мой вопрос: какие-то «изящные» (я помещал это в кавычки, потому что кто должен сказать, что является изящным, а что нет) способами достижения этого в моем приложении? В настоящее время у меня есть строковый заполнитель в моих исходных файлах, который выглядит как «API_PLACEHOLDER» и задача Grunt, которая выполняет замену строки где-нибудь в моей кодовой базе, где она соответствует этой строке. Очевидно, что это не идеально, потому что файлы, в которых эти замещающие элементы заменены, контролируются с помощью источника, и я действительно не хочу выполнять замену строки, а затем случайно совершать некоторый код с жестко закодированными адресами API разработчика, поскольку это будет нарушено.

Дополнительная информация: Я использую Grunt в своем приложении, я развертываю в Windows (не могу быть изменен, к сожалению), я использую Git для управления исходным кодом, и я делаю сборку/развертывание с помощью Bamboo.

Более чем рады ответить на любые другие вопросы о моей проблеме.

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

Благодаря

.!
+0

Переменная окружения в фоновом контингенте может сообщить серверу, какую переменную Javascript добавить в каждую страницу, чтобы интерфейс мог использовать что переменная JS должна знать, какое имя DNS-сервера использовать. Или вы можете закодировать front-end для проверки такой переменной и, если ее не найти, она будет использовать производственную среду. Если он найден, он будет использовать все, что есть. – jfriend00

+0

@ jfriend00 - как интерфейс знает, что такое переменная среды на заднем конце? Мне кажется, что проблема с курицей и яйцом. –

+0

Если вы читаете снова, я сказал, что back-end помещает переменную JS на каждую страницу, которая указывает, что использовать. Поскольку переменная JS находится на странице, она доступна для интерфейсного JS. – jfriend00

ответ

0

Я использую gulp-ng-config которая позволяет динамически генерируемые угловые константы, которые будет добавлен к моему приложению на основе от переменной среды узла.

в Документах из указанных выше ссылки является примером предложения другого апи URL, чтобы передний конца приложения , Я уверен, что есть версия хрюка, ведь grunt-ng-config выглядит как экв uivalent. Параметр конфигурации значений принимает функцию, в которой вы можете возвращать что-то в зависимости от переменной окружения узла.

+0

Это выглядит великолепно! Мой единственный вопрос заключается в том, что, поскольку он заменяет строку в модулях, к которым он прикасается, и модули, к которым он прикасается, контролируются с помощью источника, будут отмечать эти файлы как измененные, и я не хочу фиксировать результаты, так как это нарушит производство и постановки. Как мне с этим справиться? –

+0

Я не уверен, что вы подразумеваете под этим, строчка заменяет модули, к которым она прикасается. Я добавил имя файла, который он создает, в мой список gitignore, вот и все, что мне нужно было сделать с помощью управления исходным кодом – mindparse

+0

. Замена строки просто занимает шаблон и заменяет его чем-то другим :) –