Я показываю предупреждение на основе HTTP-ответа, возвращенного в Angular. Мой код работает с методами Get и Post, но не с методами put и delete. Я застрял здесь и был бы очень рад, если бы кто-нибудь мог мне помочь. ApiUrl.ts => экспортировать const AlertUrls: string[] = [ // URL-адреса серверной службы]
мой-перехватчик.ts => импорт { AlertUrls, коллекция } из "../ApiUrl";
return next.handle(req).pipe(
map((response: any) => {
if ( AlertUrls.includes(req.url) && req.method !=='GET' && response instanceof HttpResponse && response.status === 200) {
this.alertService.showSuccessAlert();
}
return response;
}),
@NarenMurali На самом деле, когда отладчик открыт, пока работает метод post, рядом со следующим значением => map((ответ: любой) => { response = HttpResponse { header: HttpHeaders, status: 200, statusText: 'OK' , url: '(url внутренней службы)', ok: true, ...} Появляется такая строка, и когда я продолжаю работу отладчика, та же строка появляется рядом с этим кодом: ответ экземпляра HttpResponse &&.
@NarenMurali Однако, когда отладчик включен и запущены методы put и delete, рядом со значением здесь выводится карта((ответ: любой) => выводится строка выше. Экземпляр ответа HttpResponse && не записывает никакого кода дальше к значению здесь. Как вы думаете, проблема может быть связана с этим?
вы можете просто console.info(AlertUrls.includes(req.url), req.method !=='GET', response instanceof HttpResponse, response.status === 200)
проверить все отдельные условия, если отладчик вызывает у вас проблемы!
@NarenMurali URL-адрес не полностью совпадает с нашим URL-адресом удаления из-за нашего идентификатора элемента удаления. Так что это не входит в условие if. На самом деле это проблема, но я все еще не понимаю, как я могу решить эту проблему.
Несовпадение URL-адреса — это проблема, с которой вы столкнулись. Вы можете просто использовать свойство string, включает, чтобы проверить, присутствует ли строка внутри URL-адреса, вместо полной проверки на равенство!
AlertUrl: /delete
будет соответствовать
Полный URL: /delete/123uuh4u23424
return next.handle(req).pipe(
map((response: any) => {
if (AlertUrls.find((url: any) => req.url.includes(url)) && req.method !=='GET' && response instanceof HttpResponse && response.status === 200) {
this.alertService.showSuccessAlert();
}
return response;
}),
Я решил так. return next.handle(req).pipe( карта((ответ: любой) => { console.info(AlertUrls) console.info(req.url) let cloneReq = req.url; let reqSplit = req.url.split( '='); console.info(reqSplit) if (reqSplit.length>1){ cloneReq = reqSplit[0] + " = " ; } if ( AlertUrls.includes(cloneReq) && экземпляр ответа HttpResponse && response.status == = 200) { this.alertService.showSuccessAlert() } возвращаем ответ });
Но ваш метод тоже сработал. Я попробовал несколько минут назад. Так что большое вам спасибо. Специально для вашей идеи отладчика. Потому что именно так я смог обнаружить проблему. Еще раз спасибо ^^
поставьте отладчик на условие if и проверьте его вручную! одно из условий if оценивается как ложное и должно быть выполнено вами!