"Unhandled rejection" Aurelia Fetch 客户端错误
"Unhandled rejection" error in Aurelia Fetch Client
我使用 Aurelia Fetch Client 库通过代码从后端服务器获取 JSON 数据:
getData() {
let httpClient = new HttpClient();
return httpClient.fetch('http://localhost:9220/get-data')
.then(response => response.json())
.then(data => return data);
}
}
并且方法 getData()
由代码从另一个代码调用:
dataService.getData().then(data => {
this.data = data;
}).catch(error => {
this.backendError = true;
});
如您所见,我在这里使用了一个 catch
语句,并在出现错误时调用它,但我还在控制台中看到一条来自库的错误消息:“vendor -bundle.js:1395 未处理的拒绝类型错误:无法获取 ”。我怎样才能摆脱它?
我不确定这是否是 Aurelia HTTP Fetch Client 的错误,但添加 responseError
拦截器应该会删除控制台中的未处理异常警告。
let http = new HttpClient();
http.configure(config => {
config.withInterceptor({
response(response) {
return response;
},
responseError(error) {
return error;
}
})
});
此错误也可能来自 .NET Core API 中的 UseDeveloperExceptionPage
中间件。此中间件从创建 CORS 问题的响应中删除所有 headers 并导致您看到的 "TypeError: Failed to fetch" 错误。这是我的解决方案的示例,完整描述 here.
.NET 核心中间件
private static Task HandleExceptionAsync(HttpContext context, Exception exception)
{
var code = HttpStatusCode.InternalServerError;
var result = JsonConvert.SerializeObject(new { error = "An internal server error has occurred." });
context.Response.ContentType = "application/json";
context.Response.StatusCode = (int)code;
return context.Response.WriteAsync(result);
}
Aurelia 拦截器
responseError(response: any): Promise<Response> {
if (response instanceof Response) {
return response.json().then((serverError: ServerError) => {
// Do something with the error here.
return Promise.reject<Response>(serverError.error);
});
}
}
我使用 Aurelia Fetch Client 库通过代码从后端服务器获取 JSON 数据:
getData() {
let httpClient = new HttpClient();
return httpClient.fetch('http://localhost:9220/get-data')
.then(response => response.json())
.then(data => return data);
}
}
并且方法 getData()
由代码从另一个代码调用:
dataService.getData().then(data => {
this.data = data;
}).catch(error => {
this.backendError = true;
});
如您所见,我在这里使用了一个 catch
语句,并在出现错误时调用它,但我还在控制台中看到一条来自库的错误消息:“vendor -bundle.js:1395 未处理的拒绝类型错误:无法获取 ”。我怎样才能摆脱它?
我不确定这是否是 Aurelia HTTP Fetch Client 的错误,但添加 responseError
拦截器应该会删除控制台中的未处理异常警告。
let http = new HttpClient();
http.configure(config => {
config.withInterceptor({
response(response) {
return response;
},
responseError(error) {
return error;
}
})
});
此错误也可能来自 .NET Core API 中的 UseDeveloperExceptionPage
中间件。此中间件从创建 CORS 问题的响应中删除所有 headers 并导致您看到的 "TypeError: Failed to fetch" 错误。这是我的解决方案的示例,完整描述 here.
.NET 核心中间件
private static Task HandleExceptionAsync(HttpContext context, Exception exception)
{
var code = HttpStatusCode.InternalServerError;
var result = JsonConvert.SerializeObject(new { error = "An internal server error has occurred." });
context.Response.ContentType = "application/json";
context.Response.StatusCode = (int)code;
return context.Response.WriteAsync(result);
}
Aurelia 拦截器
responseError(response: any): Promise<Response> {
if (response instanceof Response) {
return response.json().then((serverError: ServerError) => {
// Do something with the error here.
return Promise.reject<Response>(serverError.error);
});
}
}