HttpInterceptor
以内に約束をすることはできますか?例:Angular HttpClientインターセプタで約束を使用
export class AuthInterceptor implements HttpInterceptor{
this.someService.someFunction()
.then((data)=>{
//do something with data and then
return next.handle(req);
});
}
なぜこれが必要ですか?なぜなら、サーバーに要求を出す前に、要求ヘッダーに追加するトークンを取得する必要があるからです。
マイインターセプター:
@Injectable()
export class AuthInterceptor implements HttpInterceptor{
constructor(private authService: AuthService){}
intercept(req: HttpRequest<any>, next: HttpHandler) : Observable<HttpEvent<any>>{
console.log('Intercepted!');
// return next.handle(req);
this.authService.getToken()
.then((token)=>{
console.log(token);
const reqClone = req.clone({
headers: req.headers
.set('Authorization', 'Bearer ' + token)
.append('Content-Type', application/json')
});
console.log(reqClone);
return next.handle(reqClone);
})
.catch((err)=>{
console.log('error in interceptor' + err);
return null;
});
}
}
要求:
this.http.post(this.baseURL + 'hero', data)
.subscribe(
(res: any) => {
console.log('Saved Successfully.');
console.log(res);
},
(err: any) => {
console.log('Save Error.' + err);
}
);
問題私が直面しています:
- >約束が解決される前に、私はこのエラーを取得します。
You provided 'undefined' where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.
私はトークンを取得しますが、エラーが発生しました。
私はちょうど確認:あなたは、次の試みることができるので、約束と
イム良くありません開発者のツールの下で私のxhrの要求は、そこに 'ヒーロー'の要求はありません。したがって、インターセプタは要求を継続していません? – nightElf91