【发布时间】:2021-04-16 02:28:03
【问题描述】:
您好,我遇到了一个简单的问题。
我的代码的目标是处理 401 http 响应并导航回登录屏幕。
以下是我的基类
@Injectable({
providedIn: 'root',
})
export class BaseService {
constructor(public router: Router, public snakeBar: MatSnackBar) {}
handleError(errorResponse: HttpErrorResponse) {
if (errorResponse instanceof HttpErrorResponse) {
if (errorResponse.status == 401) {
this.router.navigate(['auth/login']);
this.snakeBar.open('Session expired, Please login again', 'OK', {
duration: 3000,
});
}
}
}
}
以下是对基础服务进行扩展的服务之一。
@Injectable({
providedIn: 'root',
})
export class SettingsService extends BaseService {
constructor(
private https: HttpClient
) {
super();
}
getSomeData(): Observable<any> {
const { ctoken } = localStorage;
const httpOptions = {
headers: new HttpHeaders({
Authorization: `bearer ${ctoken}`,
}),
};
return this.https
.get(
`someUrl`,
httpOptions
)
.pipe(catchError(this.handleError));
}
}
根据代码标准,我必须向我的父母发送两个参数,路由器和小吃店。
第一个问题 = 我在 10+ 服务中扩展了基础服务,很难从所有扩展类发送。 第二期 = 即使在发送超级(路由器,matSnackBar)之后。我收到错误路由器,并且在基本服务中未定义小吃吧。
谁能解释一下如何解决这个问题。
我使用角度 10
【问题讨论】:
-
要处理 http 响应,您可以使用处理所有 http 调用的 http 拦截器。
标签: javascript angular typescript http