如何获取由角度表达快递抛出的详细错误消息

时间:2019-04-02 21:07:17

标签: node.js angular http express rxjs

我正在从角度向节点/ express API发送HTTP请求。如何获取从node / express API发送的实际错误消息

当将异常抛出到API中时,我可以很好地处理它们,但是当我尝试在Angular中读取消息时,我只会得到抛出的错误类型的名称。例如,如果我抛出409,则angular收到的错误只是“冲突”,并且不包含我发送的详细信息。请在下面查看我的代码。

我正在按以下方式发送我的请求

register(user: UserAccount) {
    return this.http
      .post(`${config.apiUrl}/users/register`, user)
      .pipe(
        map((res: HttpResponse<Response>) => {
          return res;
        }))
      .pipe(catchError(err => this.errorHandler.handleError(err)));
  }

我的句柄错误如下:

handleError(error: HttpErrorResponse) {
    console.log(error);
    if (error) {
      let errMessage = '';
      try {
        errMessage = error.message;
      } catch (error) {
        errMessage = error.statusText;
      }
      return throwError(errMessage || error || 'Server error');
    }
    return throwError(error.error || error || 'Server error');
  }

这是我在Node / Express API中发生错误时如何抛出错误的方式

 registerUser (req, res) {
    debug(chalk.blue(`*** insert user`))
    userRepo
      .create(req.body)
      .then(user => {
        debug(chalk.green(`*** Insert User ok!`))
        res.status(200).json({
          status: true,
          error: null,
          user: user
        })
      })
      .catch(err => {
        debug(chalk.red(`*** insertUser error: ${util.inspect(err)}`))
        if (err['type'] && err['type'] === '409') {
          res.status(409).json({
            status: false,
            error: err['message'],
            user: null
          })
        } else {
          res.status(400).json({
            status: false,
            error: err,
            user: null
          })
        }
      })
  }

我希望能够接收带有有关错误信息的json对象,但是访问错误项时我得到的只是例如举起409的情况,我只会收到'Conflict'< / p>

1 个答案:

答案 0 :(得分:0)

The response data in case of error is inside the error property of HttpErrorResponse. So you may need to modify the handleError method as below.

handleError(error: HttpErrorResponse) {
    console.log(error);
    if (error) {
      let errMessage = '';
      try {
        // error.error holds the json response sent from API. 
        errMessage = JSON.stringify(error.error);
      } catch (error) {
        errMessage = error.statusText;
      }
      return throwError(errMessage || error || 'Server error');
    }
    return throwError(error.error || error || 'Server error');
  }