Node.js返回的JSON错误信息在Angular中无法读取errorMessage如何解决
问题原因
- Node.js 错误处理中间件存在逻辑错误:
res.json()方法本身已经完成响应发送、自动结束响应流程,你后续额外调用res.send()属于重复发送响应,会破坏响应结构,导致响应的Content-Type头异常,Angular HttpClient 无法自动将响应体解析为JSON对象。 - 你打印的
error.error实际是JSON字符串类型,而非解析完成的对象,直接读取对象属性自然返回undefined。
修复步骤
第一步:修复Node.js服务端代码
删除多余的res.send()调用,修正后的代码如下:
app.use((error, req, res, next) => { const body = { errorMessage: error.message || JSON.stringify(error) } const status = error.status || 500; res.status(status); res.header('Error', error.message); res.json(body); })
第二步:适配Angular端取值逻辑
如果你的Angular HttpClient请求配置了responseType: 'text',或者修复服务端后还是存在取值问题,增加手动JSON解析逻辑即可:
(error: HttpErrorResponse) => { this.loadingSpinner.stopLoading(); let errorMessage = '未知错误'; // 先判断error.error的类型 if (typeof error.error === 'string') { try { // 是JSON字符串就先解析 const errObj = JSON.parse(error.error); errorMessage = errObj.errorMessage || error.error; } catch (parseErr) { // 解析失败直接用原始值 errorMessage = error.error; } } else { // 已经是对象直接取值 errorMessage = error.error?.errorMessage || error.message || '未知错误'; } console.log(errorMessage); }
内容的提问来源于stack exchange,提问作者Buzz
相关产品推荐
相关产品推荐

