aurelia - 无法触发 requestError 拦截器
问题描述
我想在处理请求之前检查用户的令牌是否有效,我正在使用拦截器进行此操作。
以下是代码:
request: (request: RequestMessage): any => {
return new Promise((resolve, reject) => {
console.log('token expires at', this.expiresAt);
if (this.isTokenExpired()) {
console.log('token expired');
throw new Error("{ message: 'Session expired', statusCode: 401 }");
}
if (this.accessToken) {
this.setAuthorizationHeaders(request);
}
resolve(request);
});
},
requestError: (error): any => {
console.log('request error', error);
throw new Error(`yo ${error}`);
}
但是,虽然我在控制台中看到错误,但它似乎永远不会通过requestError
. 我已经在源代码中查看了 Interceptor 方法的单元测试,但没有看到与我在这里尝试的有太大不同的东西。我究竟做错了什么?
编辑:添加HttpClient
配置代码:
const request = this.httpClient
.createRequest(url)
.withBaseUrl(this.baseUrl)
.withHeader('Accept', 'application/json');
// Interceptor ?
if (withInterceptor) {
request.withInterceptor(this.interceptor);
}
// Content type
if (contentType) {
request.withHeader('Content-Type', contentType);
}
// Params
if (params != null) {
request.withParams(params);
}
// Data
if (data != null) {
request.withContent(urlEncode ? UrlUtils.encodeQueryData(data) : data);
}
// Method
switch (method) {
case 'GET':
request.asGet();
break;
case 'POST':
request.asPost();
break;
case 'PUT':
request.asPut();
break;
case 'DELETE':
request.asDelete();
break;
}
解决方案
以下来自官方文档:
requestError acts as a Promise rejection handler during Request creation and request interceptor execution. It will receive the rejection reason, and can either re-throw, or recover by returning a valid Request.
您可以看到,仅requestError
当且仅当在请求创建期间出现错误时才输入:格式错误的标头、无效的配置等。
您在这个问题中提出的用法是完全有效的,因此不会引发任何错误requestError
。
推荐阅读
- powershell - 计算每个文件的字符出现次数(仅限第一行)
- laravel - Laravel 与 Percona DB 冲突,因为表没有主键
- postgresql - 如何在 POSTGREQL 9.6 中创建递归函数?
- javascript - 将方法作为参数传递给类内的另一个方法时出错
- laravel - Laravel 5.8 Multiple middlewares using guards and specific options for each guard
- python - 如何编写一个函数 mersenne_prime,它接受参数 n_max 并返回 p 小于 n_max 的所有梅森素数 q 的列表?
- reactjs - TypeScript 强制转换运算符“as”上的 ESlint 解析错误“Unexpected token”
- javascript - 通过 href 链接到 JavaScript 函数
- python - 在python中将2D(5x3)数组乘以1D(5x1)数组
- ui-automation - 当我获得 CEF 窗口的 hwnd 时如何打开 Web 可访问性