Лучшие практики для обработки проверки / исключения на стороне сервера в Angular - PullRequest
0 голосов
/ 07 апреля 2020

Я всегда использовал для получения HTTP-ответа с объектом TypeScript.

validateTokenHttp(token: string): Observable<User> {
    return this.http.get<User>(`${environment.api}/auth/verifyToken/${token}`);
}

Иногда он возвращает User объект или Account Not Verified или Account Not Valid или Account is __some resonse__.

Вопрос в том, как лучше всего справиться с этим?

Возможности, которые я рассмотрел:

  1. Отправить ответ с кодом состояния 401 или другими,

    this.validateTokenHttp(token)
        .subscribe(
          (user) => {
              // do success operation
          },
          (error) => {
             if(error.status == 401){
                 console.log(error.error); // do the exception
             }
          }
        );
    
    • Ответ
      // Status Code: 401
      {message: "Account Not Verified"}
      

    ПРИМЕЧАНИЕ: В этом случае мы говорим код состояния 401, на самом деле мы можем иметь несколько различных проверка на сервере, который не соответствует коду состояния 401.

  2. Отправлять ошибки проверки в ответе HTTP с кодом состояния 200

    validateTokenHttp(token: string): Observable<any> {
        return this.http.get<any>(`${environment.api}/auth/verifyToken/${token}`);
    }
    
    getUser(){
        this.validateTokenHttp(token)
        .subscribe(data=>{
            if(data.success == true){
            //do success operation
            }
            else{
            //do the exception operation
            }
        });
    }
    
    • Ответ 1

      //Status Code: 200
      {success: true, data: "--User details JSON object"}
      
    • Ответ 2

      //Status Code: 200
      {success: false, message: "Account Not Verified"}
      

Но если мы go для решения 2 необходимо изменить тип возврата validateTokenHttp(token: string): Observable<User> на validateTokenHttp(token: string): Observable<any>. Я думаю, что использование <any> объекта не может быть хорошим.

Есть ли способ предсказать два объекта? Observable<User || CustomErrorObject>

Есть ли какой-нибудь способ убедиться, что мы получили User объект?

Кто-нибудь может сказать мне, как лучше всего обрабатывать такого рода проверки / ответы сервера?

1 Ответ

0 голосов
/ 07 апреля 2020

На этот вопрос нет 1 хорошего ответа, но я постараюсь дать свою точку зрения на это.

Я бы всегда предпочел вариант 1.

Сначала - имеет смысл возвращать 401, когда пользователь не авторизован. Вы предпочитаете создавать API, чтобы другие могли его понимать и использовать, поэтому для меня важны стандарты.

Второе. Я всегда предпочитаю обрабатывать ошибки HTTP внутри наблюдаемого с помощью оператора catchError. Основная причина в том, что ошибки могут нарушить цепочку потоков. Обработка ошибки с помощью catchError сохранит вашу наблюдаемость живой и позволит вам решить, что должен возвращать поток.

Кроме того, вы всегда можете вернуть: Observable<User | ErrorObject>

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