PUT时,Restangular没有BaseUrl

时间:2015-05-07 12:33:57

标签: angularjs restangular hateoas

我使用Restangular并尝试输出一些数据,但似乎失去了BaseUrl。 在配置函数中,我为Restangular和其他Restangular字段定义BaseUrl。

Constants.restangularBaseUrl是http://192.168.1.100/api/

RestangularProvider.setBaseUrl(Constants.restangularBaseUrl)
    .setRestangularFields({
    selfLink: '_links.self.href',
        id: '_id',
        etag: '_etag'
    })
    .addResponseInterceptor(function(data, operation, what, url, response, deferred){
        if (operation === 'getList') {
            var result = data._items;
            result._meta = data._meta;
            result._links = data._links;
            return result;
        }
        return data;
    });

然后我有一些这样的模型:

(function(){
    angular.module('models.ebayItems', ['services.constants', 'restangular'])
    .service('EbayItems', ['Constants', 'Restangular', function (Constants, Restangular) {
        Restangular.extendModel('ebayitems', function(model) {
            model.toggleMonitor = function(){
                var item = this;
                Restangular.one('ebayitems', this._id).patch({active: this.active}, '', {'If-Match': this._etag})
                .then(function(data){
                    item._etag = data._etag;
                }, function(error){
                    console.log('error', error);
                });
            };
            return model;
        });

        var ebayItems = Restangular.all('ebayitems');

        var ebayItemsOneSearch = function(_id){
            return ebayItems.customGETLIST('', {where: {searchId: _id}});   
        };

        return {
            items: ebayItems,
            oneSearch: ebayItemsOneSearch
        };

    }])
})();

现在,当我尝试使用基于该模型的项目执行put请求时:

item.put()

它使用了错误的网址,我的意思是它丢失了BaseUrl,所以不要放在:

http://192.168.1.100/api/ebayitems/12345

它放在

http://192.168.1.100/ebayitems/12345

导致404错误。

为什么呢? 我究竟做错了什么? 任何帮助真的很感激。 谢谢

1 个答案:

答案 0 :(得分:1)

问题是设置一个来自API后端的相对URL的selfLink字段会覆盖BaseUrl。 从它运行的配置功能中删除该字段。

RestangularProvider.setBaseUrl(Constants.restangularBaseUrl)
    .setRestangularFields({
        id: '_id',
        etag: '_etag'
    })
    .addResponseInterceptor(function(data, operation, what, url, response, deferred){
        if (operation === 'getList') {
            var result = data._items;
            result._meta = data._meta;
            result._links = data._links;
            return result;
        }
        return data;
    });