angular - 当 API 返回 204 状态码时,httpclient 响应为空
问题描述
我有一个休息端点/Products/latest
,如果没有产品,它会返回 204,以及以下通用角度服务:
getFromAPI(url: string) {
const params = new HttpParams();
return this.http
.get(url, { params: params })
.catch((err: HttpErrorResponse) => {
console.error(`Backend returned code ${err.status}, body was: ${err.error}`);
return Observable.of([]);
});
}
和
getFromAPI() {
return this.masterService.get('/Products/latest').map((res: Response) => {
if (res.status === 204) {
return Observable.of([]);
} else {
return res;
}
});
}
但是,当服务产生 204 代码时,我收到以下错误:
TypeError:无法读取 null 的属性“状态”
这怎么可能发生?如果 API 以 204 响应,为什么整个响应为空?
解决方案
首先,我会说您的后端为空集合返回 204 而不是 200 与空列表一起返回,这很奇怪(或错误) 。
使用 Angular7 和 RxJS6 我构建了一个测试用例,其中我的后端配置如下:
[HttpGet("/Products/latest")]
public async Task<NoContentResult> list()
{
return NoContent();
}
在前端使用:
public getFromAPI() {
return this.httpClient.get('/Products/latest', { observe: 'response' }).pipe(
switchMap(res => res.status === 204 ? of([]) : of(res))
).subscribe();
}
尽管没有正文,但响应显然包含一个状态:
您的问题可能在于this.masterService
似乎代理了您的 http 客户端并吞下了一些属性?
推荐阅读
- api - curl GET json请求超过100个项目
- python - PyCharm 调试器在尝试调试简单程序时“找不到空闲的套接字端口”
- python - 基于逻辑的 SQLAlchemy 过滤器
- java - 子字段上的 GraphQL 参数
- css - 仅当屏幕高度足够时 Flexbox 垂直居中
- javascript - ERROR 错误:未捕获(在承诺中):错误:调用 getActive 时必需的参数参与者 ID 为空或未定义
- neural-network - 使用 BertForTokenClassification 模型预测 NER
- android - Android Studio中SETAFFINITY ret = -1是什么意思?这是我的活动日志
- java - 基于java中的用户输入更新数据库
- javascript - -[object Object]- Google 距离矩阵上的错误 - Android 和 iOS