Как получить подробное сообщение об ошибке, сгенерированное экспрессом в угловых - 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 Ответ

0 голосов
/ 08 апреля 2019

Данные ответа в случае ошибки находятся в свойстве error HttpErrorResponse. Поэтому вам может потребоваться изменить метод handleError, как показано ниже.

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');
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...