PUT 时 Restangular no BaseUrl

Restangular no BaseUrl when do PUT

我正在使用 Restangular 并尝试 PUT 一些数据,但它似乎丢失了 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
        };

    }])
})();

现在,当我尝试对基于该模型的项目执行放置请求时:

item.put()

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

http://192.168.1.100/api/ebayitems/12345

它放在

http://192.168.1.100/ebayitems/12345

导致 404 错误。

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

问题是设置一个来自 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;
    });