angular – HttpClient无法解析空响应
发布时间:2020-12-17 06:56:56 所属栏目:安全 来源:网络整理
导读:我有一个拦截器,在标头中添加一个标记.但是,如果我在POST请求后使用它,则不会触发订阅中的Observer. 拦截器: intercept(req: HttpRequestany,next: HttpHandler): ObservableHttpEventany {this.authService = this.inj.get(AuthService);if (!this.authSer
我有一个拦截器,在标头中添加一个标记.但是,如果我在POST请求后使用它,则不会触发订阅中的Observer.
拦截器: intercept(req: HttpRequest<any>,next: HttpHandler): Observable<HttpEvent<any>> { this.authService = this.inj.get(AuthService); if (!this.authService.isLoggedIn()) { return next.handle(req); } const changedReq = req.clone({headers: req.headers.set('Authorization',`Bearer ${this.authService.getToken()}`)}); return next.handle(changedReq); } 服务: saveBeer(beerForm: BeerForm): Observable<Response> { let body = JSON.stringify(beerForm); let headers = new HttpHeaders({ 'Content-Type': 'application/json' }); return this.http.post(this.apiUrl,body,{headers: headers}); } 零件: onSubmitCreateBeer(): void { this.beerService.saveBeer(this.beerForm) .takeUntil(this.ngUnsubscribe) .subscribe( (response: Response) => { // On response this.router.navigate(['/beers']); },error => { // On error },() => { // On complete }); } 我的问题是,响应永远不会被触发,所以我的导航步骤不起作用.如果我禁用拦截器一切正常. 有任何想法吗? 解决方法
我搞定了.问题是我的观察者在回应中期待json.然而,在我得到200 OK之后,响应中没有任何内容.这是一个错误,因此调用了错误函数.
解决方案1是设置responseType:text. saveBeer(beerForm: BeerForm): Observable<any> { let body = JSON.stringify(beerForm); let headers = new HttpHeaders({ 'Content-Type': 'application/json' }); return this.http.post(this.apiUrl,{headers: headers,responseType: 'text'}); } 解决方案2是从后端返回204. 两者现在都工作正常.有关于此的错误报告: https://github.com/angular/angular/issues/18680 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |