При отправке POST на конечную точку на сервисном уровне для обновления профиля пользователя мне нужно снять определенные значения из полезной нагрузки запроса (профиль с требуемыми изменениями от клиента) и повторно подключить их в полезной нагрузке ответа (обновленный профиль с сервера). Я в настоящее время выполняет поведение с помощью Угловое-х request and response transformers, как это:Правильное использование трансформаторов против перехватчиков
myService.updateProfile = function (profile) {
return $http({
method: 'POST',
withCredentials: true,
url: root + 'users/profile',
data: profile,
transformRequest : requestTransformer,
transformResponse : responseTransformer
});
};
// the map used during transformation below
var myMap = {
0: 'foo',
1: 'bar',
2: 'etc'
};
// prependTransform() and appendTransform() are similar to the example provided in Angular transformer docs here:
// https://docs.angularjs.org/api/ng/service/$http#overriding-the-default-transformations-per-request
var requestTransformer = httpTransformer.prependTransform($http.defaults.transformRequest, function(profileRequest) {
profileRequest.myKey = myMap.indexOf(profileRequest.myValue);
delete profileRequest.myValue;
return profileRequest;
});
var responseTransformer = httpTransformer.appendTransform($http.defaults.transformResponse, function(profileResponse) {
profileRequest.myValue = myMap[profileRequest.myKey];
delete profileRequest.myKey;
return profileResponse;
});
I предварять трансформатор для трансформаторов запроса по умолчанию и добавить трансформатор для трансформаторов отклика по умолчанию. Мой вопрос: есть ли лучший способ сделать это? Возможно, вместо этого используется interceptors, as documented here,? Если да, то как?
Я бы просто обернул http-запрос в службе. В принципе, перед вызовом вы снимаете его, затем он возвращается, вы можете добавить его обратно в .then call. – Strawberry
Вы можете использовать перехватчики, но они в основном полезны для перехвата HTTP-запросов/ответов во всем мире (что означает для каждого сделанного вызова). Вы все еще можете использовать перехватчики, но вам нужно определить конкретный маршрут API, который будет обрабатываться вашим перехватчиком. –