角度4可观察的捕获服务undefined
问题描述:
我有一个服务来处理与后端交互。我希望捕获401状态,表明用户已被后端注销(令牌过期)。所以当我抓到401时,我会保存当前的路线,并将它们导航到登录页面。但是,当我发现错误时,路由器服务未定义。这跟可观察物有关吗?角度4可观察的捕获服务undefined
@Injectable()
export class SiteService {
private url : string = "site";
constructor(
private http: Http,
private authService : AuthenticationService,
private router : Router,
private globals : Globals
){}
addSite(site : Site) : Observable<Site> {
let data = new URLSearchParams();
data.append('auth', this.authService.getToken());
const options = new RequestOptions({
params: data
});
return this.http.post(this.url, site, options).map(response => {
return toSite(response.json().data);
}).catch(this.handleError);
}
changeSite(site : Site) : Observable<Site> {
let data = new URLSearchParams();
data.append('id', this.authService.getToken());
const options = new RequestOptions({
params: data
});
return this.http.post(`${this.url}/${site.siteName}`, site, options).map(response => {
return toSite(response.json().data);
}).catch(this.handleError);
}
private handleError(error : any) {
let errMsg = (error.message) ? error.message : error.status ? `${error.status} - ${error.statusText}` : 'Server error';
console.error(errMsg);
if((error.status == 403 || error.status == 401) &&(error.json().error.indexOf("token") >= 0)){
this.globals.nextLocation = this.router.url;
this.router.navigate(['login']);
}
return Observable.throw(error);
}
}
答
通过
catch(error => this.handleError(error))
更换
catch(this.handleError)
否则,你不是的HandleError功能结合this
。
另请注意,您的状态正确的状态代码是401,而不是403
+0
你是正确的约401 - 不幸的是有些人对该团队决定使用403而不是401,并且在评论期间没有发现。所以两者都必须处理,然后进行字符串比较......太可怕了。谢谢。我知道这很简单.. –
'的console.log(错误)'在里面的HandleError和更新截图 – Aravind