私は(現在は模擬した)バックエンドから毎日のデータを取得するカレンダーアプリケーションを構築しています。 http.getの正しいURLで、URLが間違っている場合や、要求された日のバックエンドにデータ/ jsonオブジェクトがない場合(例:週末にデータがない場合)、正常に動作します。 I(明らかに)404、コンソールでログはめったにそれを示していないが、代わりにそれはいつも私に次のエラーを与えます:何のJSONオブジェクトがために存在しないようhttp.get - 正しく捕捉する方法404
SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data
明らかにそれはそこに期待される性質を持つことはできません要求された日。ネットワーク分析をチェックすると、それは確かに404エラーです。
私はここに https://angular.io/guide/http#subscribeコードhttp.getとサービスの基本からhttp.getとhandleErrorのを使用
:
getDayInfo(date: string): Observable<any> {
return this.gttp.get('somepath/' + date + '/somemoreinfo')
.map(this.extractData, // works just fine
console.log('map running for date: ', date)
)
.catch(this.handleError);
}
private extractData(res: Response) {
if (res != null) {
let body = res.json();;
return body;
} else { // else return an empty dummy json, doesn't really work here
return '[{"id": "", "userId": "", "userName": "", "type": { "name": "" }, "date": {' +
'"startDate": "", "endDate": "", "startTime": "", "endTime": "" } }]'; }
}
private handleError(error: Response | any) {
console.log('Errorhandling triggered');
let errMsg: string;
if (error instanceof Response) {
console.log('Errorhandling if-block'); // this triggers on a 404
const body = error.json() || '';
const err = body.error || JSON.stringify(body);
errMsg = `${error.status} - ${error.statusText || '' } ${err}`;
} else {
errMsg = error.message ? error.message : error.toString();
}
console.error('Error ', errMsg); // this never appears in the log though
return Observable.throw(errMsg);
}
私の目標は、それを持つのではなく、404をキャッチすることです以前に投稿したJSON.parseエラーをスローして、代わりに空のjsonオブジェクト(またはダミーjsonオブジェクト)を送信して処理します。そのため、カレンダーの1日で何も表示されません。
私はhandleError関数のその部分をAngular.ioから直接取っていましたが、それは問題ないと思っていました...その領域では少し実験します。 – m41n
ええ私も始めましたが、Responseがバックエンドに大きく依存していることを考慮する必要があります。少なくとも私にとっては、エラーの場合にjsonオブジェクトを送信することはめったにありません。 – trichetriche
は文字列としてのerror.statusのテストのようですが、私はここでそれをキャッチして、それを私のコンポーネントでさらに処理できるようです。この時点で、私はこれが私が必要とする解決策になると信じています。だから私の最後のおかげで – m41n