gpt4 book ai didi

angular - HttpClient 无法解析空响应

转载 作者:太空狗 更新时间:2023-10-29 17:22:16 24 4
gpt4 key购买 nike

我有一个在 header 中添加标记的拦截器。但是,如果我在 POST 请求后使用它,则不会触发订阅中的观察者。

拦截器:

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 之后,响应中没有任何内容。那是一个错误,所以错误函数被调用了。

解决方案一是设置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, body, {headers: headers, responseType: 'text'});
}

方案二是后台返回204。

目前两者都可以正常工作。有一个错误报告:

https://github.com/angular/angular/issues/18680

关于angular - HttpClient 无法解析空响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47207264/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com