我正在构建一个日历应用程序,从(目前模拟的)后端获取每天的数据。
如果http.get的url正确,则可以正常工作,但是如果url错误或后端请求的日期没有任何数据/ json对象(例如,周末没有任何数据),则会返回404错误。但控制台中的日志很少显示它,而总是给出以下错误:
很明显,由于请求的日期没有Json对象存在,因此无法在那里找到预期的字符。检查网络分析后发现确实是404错误。
我使用了基本的http.get和handleError,来自这里https://angular.io/guide/http#subscribe 带有http.get的服务代码:
我的目标是捕获404错误,而不是让它抛出我之前发布的JSON.parse错误,并通过发送空的json对象(或虚拟的json对象)来处理它,以便日历中的日期仅显示空白。
SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data
很明显,由于请求的日期没有Json对象存在,因此无法在那里找到预期的字符。检查网络分析后发现确实是404错误。
我使用了基本的http.get和handleError,来自这里https://angular.io/guide/http#subscribe 带有http.get的服务代码:
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对象)来处理它,以便日历中的日期仅显示空白。
console.log(error)
并查看您可以使用哪些字段。别担心,这既不是修复也不是解决方法,Response 对象就是用来这样使用的,您会发现它们甚至有一个_body
,实际上是由json()
函数返回的 JSON。 - user4676340