Высмеивать ответ сервера, даже если сервер недоступен
Вещи, которые я знаю (пожалуйста, поправьте меня, если я ошибаюсь, спасибо:)):
HttpInterceptor
работает аналогично Аспектно-ориентированному программированию;- добавления / изменения
httpOptions
может быть достигнуто для запросов; - изменение ответа с
clone()
также может быть достигнуто для ответа;
Мои проблемы
Я хочу протестировать некоторые библиотеки, в то время как связанные с ними серверы иногда могут быть недоступны при разработке. Я просто забочусь о данных, без взаимодействия с сервером все в порядке
Возможно ли, что я могу просто вернуть ложные данные, уже подготовленные, не запрашивая сервер, когда запрос удовлетворяет некоторым шаблонам, даже если служба находится в других библиотеках?
Мои требования
- вся логика в библиотеках остается неизменной;
- использование фиктивных данных для ответа на http-запрос из библиотек;
Обновлено 2019-01-15
Благодаря помощи @Sachin Gupta я проверил interceptor
далее с этой демонстрацией.
Что сделано:
auth-interceptor.ts
добавить заголовки для запроса;logging-interceptor.ts
добавлен для отслеживания деталей запроса и стоимости времени;data-mocking-interceptor.ts
чтобы остановить запрос к серверу и вернуть ложные данные напрямую.
2 ответа
Посмотри на это!
https://stackblitz.com/edit/angular-json-http-response-catch
Если сервер достижим, данные заполняются, в противном случае смоделированный отправляется как ответ
истребитель-перехватчик
export class NoopInterceptor implements HttpInterceptor {
intercept(req: HttpRequest<any>, next: HttpHandler):
Observable<HttpEvent<any>> {
let response = new HttpResponse();
response = response.clone({body: [{"sads":"ewre"}]});
return next.handle(req).pipe(catchError((err) => {return of(response).pipe(delay(10))}) );
}
}
У вас есть 2 других варианта для рассмотрения:
- использование
ngrx store
где вы можете заполнить хранилище либо фиктивными данными напрямую, либо вернуть имитированные данные из вашего сервиса (сервис, который отправляет http-запросы на сервер и возвращает данные обратно в угловое приложение)
ИЛИ ЖЕ
- Используйте сервисных работников, где вы можете вернуть все, что вы хотите на основе ваших пользовательских критериев. По сути, то, что вы делаете здесь - это сначала PWA. Это еще более приятный подход, поскольку http-запросы (как источник данных) полностью абстрагированы от его использования. Все, что видит ваше приложение, - это сервисный работник, а где работающий сервис получает свои данные (http или макет) - вашему приложению все равно.
PS. Подход сервисного работника несколько похож на перехватчик, но на более низком уровне, поскольку он не специфичен для углов, а является частью веб-технологии в целом.