0

REST API で次の HTTP 要求からカスタム パラメーターを削除しようとしています。

http://localhost:3000/users?_page=1&_perPage=30&_sortDir=DESC&_sortField=idにしたい

http://localhost:3000/users

私は AngularJS 管理パネルである ng-admin を使用しています。クエリ パラメータの変更に関するページが提供されています: 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 に答える