我使用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错误。
为什么呢? 我究竟做错了什么? 任何帮助真的很感激。 谢谢
答案 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;
});