Отправка пользовательской ошибки из Node / Express в Angular - PullRequest
0 голосов
/ 03 апреля 2019

Я отправляю HTTP-запрос от angular на узел / экспресс API.Как получить реальное сообщение об ошибке, которое я отправляю с узла / экспресс-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 я получаю только «Конфликт»

1 Ответ

1 голос
/ 03 апреля 2019

Причина этого заключается в том, что когда вы ловите ошибку и получаете статус 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!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...