提问人:Nicola 提问时间:8/10/2023 更新时间:8/11/2023 访问量:51
angular 中的 HttpErrorResponse 不表现为对象
HttpErrorResponse in angular is not behaving as an object
问:
我调用了 angular 中的服务,例如
removeFromAttended(class: CLS_Class) {
this.svcSubscriptions.deleteByStudenteAndClass(class.id , this.studentID).subscribe({
next: res=> { ...do things... },
error: (err: HttpErrorResponse) => { console.log("I get:", err) }
})
}
它是数据库中记录的删除,并且运行良好。
由于这是删除,有时无法执行,因为在另一个表中可能存在与我要删除的记录相关的记录。
然后,我重构了我的网络服务,当它检测到某个表中有相关记录时,会返回一条错误消息,例如“表 xy 中有相关记录”并返回一个 BadRequest...... 只是为了 C# 的完整性,有这段话
if (relatedPagelle.Any())
{
// Return a message to indicate related records
return BadRequest("Esistono pagelle per questa iscrizione. Impossibile eliminare.");
}
它在 C# 中 Visual Studio 的 SWAGGER 中工作正常,返回所需的消息。
然后,我发布了 Web 服务。 我调用该服务,当我尝试删除另一个表中具有相关记录的记录时,它正确地返回错误。
现在的问题是: 在 Chrome Inspect 控制台中,我实际上可以看到消息:它确实到达网络/响应窗口(见屏幕截图),但我无法弄清楚如何从 Angular 获取它。
我尝试了 err 的所有属性,例如 err.message、err.status、err.headers、err.type err.name ...它们都返回未定义,而如果我简单地编写错误(如上所述),它会返回 BadRequest,就好像 err 是一个字符串而不是一个对象......
但是它不应该是一个 HttpErrorResponse 对象,其中包含许多属性,其中消息也是如此?为什么它会从网络窗口显示在 Chrome 管理中心中,而无法通过代码访问?
谢谢
答:
我发现了问题所在。 我有一个httpErrorInterceptor,它搞砸了所有错误,并将它们扁平化。
我不记得我为所有呼叫创建了这样一个中间步骤。 删除它解决了这个问题。 现在 err 又回到了具有我预期属性的对象。
评论
error
next
deleteByStudenteAndClass