Dobim "Http neuspešen odgovor za (neznan url): 0 Unknown Error" namesto dejanskega sporočila o napaki v Angularju
Uporabljam Angular 4 HttpClient
za pošiljanje zahtevkov zunanji storitvi. Gre za zelo standardno nastavitev:
this.httpClient.get(url).subscribe(response => {
//do something with response
}, err => {
console.log(err.message);
}, () => {
console.log('completed');
}
Težava je v tem, da se mi ob neuspešnem zahtevku prikaže splošno sporočilo
Http failure response for (unknown url): 0 Unknown Error
sporočilo v konzoli. Medtem ko v Chromu pregledam neuspeli zahtevek, vidim, da je status odgovora 422, v zavihku "predogled" pa vidim dejansko sporočilo, ki opisuje vzrok neuspeha.
Kako lahko dostopam do dejanskega odzivnega sporočila, ki ga lahko vidim v orodjih chrome dev tools?
101
3
Težava je bila povezana s CORS. V konzoli Chrome sem opazil še eno napako: Na zahtevanem viru ni glave 'Access-Control-Allow-Origin'. Izvor 'http://localhost:4200' zato dostop ni dovoljen. Odgovor je imel kodo stanja HTTP 422.`
To pomeni, da v odgovoru zalednega strežnika ni bilo glave
Access-Control-Allow-Origin
, čeprav je bil zaledni strežnik nginx nastavljen tako, da te glave dodaja odgovorom z direktivoadd_header
.Vendar ta direktiva doda glave samo, če je koda odgovora 20X ali 30X. Pri odgovorih z napako glave manjkale. Uporabiti sem moral parameter
always
, da bi zagotovil, da se glave dodajo ne glede na kodo odgovora:add_header 'Access-Control-Allow-Origin' 'http://localhost:4200' always;
Ko je bil zaledni strežnik pravilno konfiguriran, sem lahko do dejanskega sporočila o napaki dostopal v kodi Angular.
Pri meni ga je povzročila izjema JsonSerializerException na strani strežnika.
Odjemalec je dejal:
Poenostavitev vrste odgovora z odpravo zank je rešila težavo.
Če kot zaledni strežnik uporabljate Laravel, za rešitev težave CROS v projektu Angular ali IONIC uredite svojo datoteko .htaccess tako, da vstavite to kodo.