2016-03-22 2 views
2

Я создаю веб-сайт, который вызывает вызовы для службы WCF, которую мы размещаем. Обратите внимание, что URL-адрес является жестким кодом в JS:Где мы должны хранить URL-адрес соединения для вызовов JavaScript?

var config = { 
     url: 'http://serverName:8000/MmaWebApiService/CreateCassette', 
     method: 'POST', 
     contentType: 'application/json; charset=utf-8', 
     data: { 'moduleSerialNumbers': 'dataHere' } 
    }; 

Где мы должны хранить URL-адреса? Я думаю, что файл web.config будет хорошим местом, но я не уверен, как получить к нему доступ. One suggestion что-то вроде этого:

<img id="ImgHeader" runat="server" src="<%$ ConfigurationSettings.AppSettings["ImagePath"] %>" /> 

Однако, я не думаю, что будет работать с моей обычной ола»HTML страницы, используя AngularJS. Я немного теряю информацию о том, где хранить URL-адреса службы, поэтому у меня нет жесткого кода на всей моей JS. Например, если мы развертываем на другой сервер, я не хочу, чтобы найти все вызовы в JS и заменить имя сервера. Мне не хватает лучшей практики.

+0

Всё зависит от типа модели. Вы можете использовать метод, о котором вы говорили ранее. В моей компании мы заполняем объект в основном макете с различными URL-адресами, предоставляемыми сервером. [Вы можете прочитать из Web.config с помощью 'ConfigurationManager.AppSettings'] (http://stackoverflow.com/questions/3854777/read-variable-from-web-config). –

+0

Вы можете просто положить их в.js и включить скрипт в заголовок. В одностраничном приложении я обычно хранил их в файле .json и загружал его с помощью ajax-вызова, когда это необходимо. –

+0

Майк: Я не думаю, что могу использовать ConfigurationManager в JS. Джесси: Хороший совет. Я могу попробовать. Благодаря! –

ответ

2

Поскольку правильный URL-адрес определяется во время развертывания, это проблема развертывания. Поэтому я использовал наш инструмент развертывания (Presto), чтобы изменить URL-адрес во время процесса развертывания. Я в конечном итоге хранения корневой URL в index.html:

enter image description here

Обратите внимание, что я дал ему идентификатор (подключение) к так что он может быть изменен позже наше приложение развертывания.

Тогда в моих AngularJS контроллеров, я использую это так:

 var config = { 
      url: rootWebApiUrl + '/api/Cassette', 
      method: 'POST', 
      contentType: 'application/json; charset=utf-8', 
      data: [$scope.state.subId1, $scope.state.subId2, $scope.state.subId3] 
     }; 

Я поставил Presto, чтобы изменить URL во время развертывания путем установки URL на имя сервера, на котором Web API в настоящее время развертывается.

enter image description here

Существует небольшая проблема с этим подходом: index.html должен быть в состоянии быть XML-интерпретируемым для того, чтобы приложение развертывания, чтобы изменить его. Это означает, что я должен был изменить несколько строк, например:

Должно быть в верхнем регистре:

<!DOCTYPE html[]> 

должны закрыть любые мета-теги (нужно закрывающий вперед слэш):

<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" /> 

нг ракурс должен иметь = "" после него:

<div ng-view=""> 

Я внесла эти изменения, и приложение все еще работает. Поэтому я думаю, что я хорош.

2

Угловой позволяет определить константы в настройке модуля.

angular.module('app').constant(
    ENDPOINT, { 
     "URL": 'http://serverName:8000/MmaWebApiService/CreateCassette' 
    } 
); 

Теперь у вас есть постоянная, которую можно вводить в контроллер или услугу в обычном режиме.

angular.application('app').controller('myCtrl', myCtrl); 
myCtrl.$inject['ENDPOINT']; 
function myCtrl(ENDPOINT) { 
    var myUrl = ENDPOINT.URL; 
} 
+0

Интересно. Интересно, лучше ли это, чем предложил Джесси: просто поместите URL-адреса в JS-файл. –

+0

Ну, ваше угловое приложение не запустится, если он не сможет найти конфигурацию модуля. Он будет работать (хотя и плохо), если он не может загрузить внешний файл конфигурации. –

+0

Как насчет истории развертывания? Как изменить URL-адреса на основе развертывания в QA или prod? Это ручной шаг? –

Смежные вопросы