我正在尝试从 REST API 上的以下 HTTP 请求中删除自定义参数:
我想转身http://localhost:3000/users?_page=1&_perPage=30&_sortDir=DESC&_sortField=id
成 http://localhost:3000/users
我正在使用ng-admin,这是一个AngularJS管理面板,他们在此处提供了一个有关更改查询参数的页面:https://github.com/marmelab/ng-admin/blob/master/doc/API-mapping.md
我已经使用了他们的一些代码,并尝试使用以下代码来实现我正在尝试做的事情,但它不起作用。
myApp.config(['RestangularProvider', function(RestangularProvider) {
RestangularProvider.addFullRequestInterceptor(function(element, operation, what, url, headers, params, httpConfig) {
if (operation == 'getList' && what == 'entityName') {
delete params._page;
delete params._perPage;
delete params._sortField;
delete params._sortDir;
}
console.log({ params: params });
});
}]);
最后,使用拦截器后,我如何检查发送的实际HTTP请求,chrome开发人员工具似乎只显示带有所有参数的原始请求,即使我已经实现了上述方法。我认为这是因为拦截器在浏览器实现请求后工作。
您应该从拦截器返回整个请求,否则不会对请求进行任何更改。它写在文件上。
addFullRequestInterceptor
addFullRequestInterceptor
这将添加新的 fullRequestInterceptor。fullRequestInterceptor 是 类似于requestInterceptor,但功能更强大。它让你 同时更改元素、请求参数和标头。
这是一个接收与请求拦截器相同的函数 plus 标头和查询参数(按该顺序)。
它可以返回具有以下任何(或所有)属性的对象:
标头:要发送的标头 参数:要发送的请求参数 元素:要发送的元素 httpConfig:要用来调用的 httpConfig 如果未返回属性,则使用发送的属性。
在最后一行它说 如果未返回属性,则使用发送的属性。 因此,如果您在对象中发送更改的属性,那么您应该没问题...
myApp.config(['RestangularProvider', function(RestangularProvider) {
RestangularProvider.addFullRequestInterceptor(function(element, operation, what, url, headers, params, httpConfig) {
if (operation == 'getList' && what == 'entityName') {
delete params._page;
delete params._perPage;
delete params._sortField;
delete params._sortDir;
}
console.log({ params: params });
// return changed properties which is params in this case
return { params: params };
});
}]);