我试图向Http添加一些功能,当用户获得403时,它会删除他的用户信息并重定向到登录。 AuthHttp的例子如下所示。
@Injectable()
export class AuthHttp {
constructor(
private http: Http,
private router: Router,
private authService: AuthService
) { }
get(url: string, options?: RequestOptionsArgs): Observable<any> {
return this.http.get(url, options)
.catch(this.errorHandler);
}
errorHandler(error: any): Observable<any> {
if (error.status === 403) {
console.error('TOKEN EXPIRED!');
this.authService.logout();
let link = ['/login'];
this.router.navigate(link);
}
return Observable.throw(error);
}
}
问题是,我会收到以下错误:
EXCEPTION:this.authService未定义
我不知道怎么回事,因为我试图在服务中使用服务。我在以下提供商中添加了AuthService
providers: [
...,
AuthService
]
路由器会抛出类似的错误。
答案 0 :(得分:2)
这是因为this
方法以及this
引用的上下文。当您将函数指定为回调
.catch(this.errorHandler.bind(this));
errorHandler
或者,如果您使this
成为箭头功能,则会保留errorHandler = (error: any): Observable<any> => {
(指代服务实例)
def my_handler(event, context):
try:
s3conn.head_object(Bucket='my_bucket', Key='my_filename')
except botocore.exceptions.ClientError as e:
if e.response['Error']['Code'] == "404":
raise ClientException("Key '{}' not found".format(filename))
# or: return "Key '{}' not found".format(filename) ?
class ClientException(Exception):
pass