Как я могу получить заголовки от ошибки обратного вызова подписки? - PullRequest
0 голосов
/ 03 июля 2018

Я хочу обработать любые сообщения об ошибках от сервера после того, как пользователь создаст пост-ответ. Сообщение сделано в методе UserService createUser (). Там любые ошибки отлавливаются методом catch, после чего выдается новая ошибка. Я читал, что это необходимо, иначе обратный вызов успеха внутри метода подписки будет активирован независимо от ошибки.

Я использую код Visual Studio в качестве своей IDE для этого проекта, и когда вы вводите оператор . после переменной, он дает список любых методов, которые он может вызвать для этой переменной. Переменная обратного вызова success имеет все ожидаемые методы, включая заголовки. Ошибка обратного вызова имеет только HTML. Итак, мой вопрос: как я могу получить заголовки из ошибки? Мне нужен доступ к заголовкам, потому что мое пользовательское сообщение заголовка отправляется в заголовках. Это должно быть сделано в методе подписки, который находится в контроллере компонента, потому что, когда я обрабатываю ошибку в сервисе, я не могу сделать всплывающее сообщение об ошибке. Вот мой код:

Код на стороне контроллера компонента:

  createUser():void{
    this.loading = true;
      this.userService.createUser(new UserCreateDTO(this.userForm.get('userName').value, 
                this.userForm.get('emailAddress').value, 
                this.userForm.get('password').value))
      .subscribe(
        success =>{
            this.msgs.push({severity:'success', summary:'Success', detail: `User ${this.userForm.get('userName').value} succesfully created.`});
        },
        error =>{
          let errorMessage: string = error.???
            this.msgs.push({severity:'error', summary:'Error', detail: `error`});
        }),
        () =>{
          this.loading = false;
        }
  }
}

Вопросительные знаки указывают на то, что никакие предложения методов не отображаются в стороне от метода html.

Код на стороне службы, где делается сообщение:

  createUser(newUser: UserCreateDTO): Observable<Response> {
    return this.http.post<Response>(this.authUrl + "/user/create", newUser)
            .catch((error:any) =>{
                return Observable.throw(new Error(error.status));
            });
}

Спасибо

1 Ответ

0 голосов
/ 03 июля 2018

Таким образом, заголовки будут доступны на HttpErrorResponse, что вы и возвращаете в .catch, но вы отмечаете, что это тип any, поэтому вы не увидите подсказок кода. Попробуйте catch((error: HttpErrorResponse) => в вашем сервисе, чтобы увидеть, что доступно.

Затем вы заменяете HttpErrorResponse простым Error объектом, которому вы просто присваиваете статус как сообщение (которое будет доступно как error.message в вашем обработчике ошибок в компоненте). Я думаю, вы должны определить детали ошибки, которую вы хотите в сервисе, а затем просто использовать error.message в компоненте.

...