微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

angular – HttpClient无法解析空响应

我有一个拦截器,在标头中添加一个标记.但是,如果我在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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐