"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);
        }); 
    }
}