【问题标题】:Sending custom error from Node/Express to Angular将自定义错误从 Node/Express 发送到 Angular
【发布时间】:2019-08-24 14:51:58
【问题描述】:

我正在从 Angular 向 node/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 的情况下,我只会得到“冲突”

【问题讨论】:

    标签: node.js angular http express


    【解决方案1】:

    这样做的原因是当您捕获错误并且状态为 409 时,您返回 `err['message'] 而不是 'err'。

    所以而不是:

    res.status(409).json({
                status: false,
                error: err['message'],
                user: null
              })
    

    你应该返回:

    res.status(409).json({
                    status: false,
                    error: err,
                    user: null
                  })
    

    这实际上是你在出现 400 错误的情况下所做的!

    【讨论】:

    • 感谢您的回复。它实际上不是解决方案,但您的回答使我找到了正确的解决方案。我调整了你的答案以匹配工作解决方案
    • 只是出于好奇,那是什么问题? :)
    • 问题是我返回了对象: res.status(409).json({ status: false, error: err, user: null}) 而不是仅仅做 res.status(409) .json(错误)。接受我的修改以更新答案
    猜你喜欢
    • 1970-01-01
    • 2017-11-19
    • 1970-01-01
    • 1970-01-01
    • 2019-10-19
    • 1970-01-01
    • 2020-03-17
    • 2017-10-30
    • 1970-01-01
    相关资源
    最近更新 更多