Настройка внешнего http-сервиса в angularjs

У меня есть одностраничное угловое приложение, которое вызывает службу RESTish. Как я могу настроить базовый URL-адрес для моего REST-сервера, чтобы в своих службах я мог использовать относительные URL-адреса? Кроме того, когда я играл со следующим перехватчиком, у меня возникла ошибка, из-за которой маршрутизатор angular-ui, похоже, использовал http для получения представлений, поэтому на это повлияло промежуточное программное обеспечение. В основном, я думаю, я хочу, чтобы в мои службы была внедрена вторая служба HTTP с этим промежуточным программным обеспечением, как я могу это сделать?

app.config(["$httpProvider", function($httpProvider) {
    $httpProvider.interceptors.push('middleware');
}]);

app.factory('middleware', function() {
    return {
        request: function(config) {
            // need more controlling when there is more than 1 domain involved
            config.url = "http://localhost:8080" + config.url;
            return config;
        }
    };
});

person shmish111    schedule 06.07.2014    source источник


Ответы (1)


Службы $http очень важны (и широко используются) внутри Angular.
Вы не должны изменять их таким образом.

Для обработки запросов к API лучше всего создать специальный сервис (даже если он является оболочкой для $http).

E.g.:

.service('API', function ($http) {
    var baseUrl = 'http://localhost:8080/';
    this.get = function (path, config) {
        return $http.get(baseUrl + path, config);
    }
    ...
});

Затем вы можете использовать свой сервис для всех вызовов API:

.controller('someCtrl', function (API) {
    API.get('items').success(function (data) {
        $scope.items = data;
    });
});
person gkalpak    schedule 06.07.2014
comment
Что ж, у меня есть служба, но я хочу настроить базовый URL-адрес в моем app.js и, в конечном итоге, в приложении с помощью gulp. - person shmish111; 06.07.2014
comment
но я понимаю, что вы говорите о том, чтобы не изменять его таким образом, поэтому подход промежуточного программного обеспечения определенно неверен. Думаю, мне просто нужно создать константу в app.js? - person shmish111; 06.07.2014
comment
Я не знаком с рабочим процессом gulp и тем, как вы можете настроить с его помощью базовый URL, но если вы можете определить константу или настроить службу в блоке конфигурации, это определенно сработает. - person gkalpak; 06.07.2014