0

我正在尝试从我的 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 开发人员工具似乎也只显示带有所有参数的原始请求。我认为这是因为拦截器在浏览器实现请求后起作用。

4

1 回答 1

1

您应该从拦截器返回整个请求,否则请求不会有任何更改。它写在文件上。

addFullRequestInterceptor

addFullRequestInterceptor

这会添加一个新的 fullRequestInterceptor。fullRequestInterceptor 类似于 requestInterceptor 但更强大。它还允许您更改元素、请求参数和标头。

它是一个接收与 requestInterceptor 相同的函数以及标题和查询参数(按此顺序)的函数。

它可以返回具有以下任何(或全部)属性的对象:

headers:要发送的标头 params:要发送的请求参数 element:要发送的元素 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 };


});
}]);
于 2016-01-23T01:09:23.153 回答