如何获取角度可观察的状态码

时间:2020-09-23 01:47:32

标签: javascript angular typescript

我下面有一些服务,我想获取状态码并处理其中的if语句,但到目前为止我仍无法弄清

import { Injectable } from '@angular/core';
import { EnvService } from './env.service';
import { tap } from 'rxjs/operators';
import { Observable, from } from 'rxjs';
import { map, switchMap } from 'rxjs/operators';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { NativeStorage } from '@ionic-native/native-storage/ngx';
import { Plugins } from '@capacitor/core';
const { Storage } = Plugins;

@Injectable({
  providedIn: 'root'
})
export class InvoicesServiceService {

  token: any;

  constructor(
    private env: EnvService,
    private http: HttpClient,
    private nativeStorage: NativeStorage
  ) {
    Storage.get({ key: 'token' }).then((token: any) => {
      this.token = JSON.parse(token.value)
    }).catch(error => console.error(error));
  }

  // All
  getInvoices(): Observable<any> {
    const tokenPromise =
    this.token === undefined
      ? Storage.get({ key: 'token' })
      : Promise.resolve(this.token);

    return from(tokenPromise).pipe(
      switchMap((token) => {
        this.token = this.token;
        const httpOptions = {
          headers: new HttpHeaders({
            Accept: 'application/json, text/plain',
            'Content-Type': 'application/json',
            Authorization: this.token.access_token,
          }),
        };
        return this.http
          .get(`${this.env.Dashboard}` + '/invoices', httpOptions)
          .pipe(map((data) => data));
      })
    );
  }

我想做的是,如果状态代码为403,则将用户重定向到特定路由,而不是返回数据。

有什么主意吗?

2 个答案:

答案 0 :(得分:1)

在订阅此服务的组件中,您可以处理错误

    this.service
    .getInvoices()
    .subscribe((response) => {
        // This is success
    },
    (error: HttpErrorResponse) => {
        // Handle error
        // Use if conditions to check error code, this depends on your api, how it sends error messages
    });

处理服务本身的另一种方法。

       return this.http
            .get(`${this.env.Dashboard}` + '/invoices', httpOptions)
            .pipe(map((data) => data))
            .toPromise()
            .then((response) => {
                //Success
            })
            .catch((error: HttpErrorResponse) => {
                // Handle error
            });

希望这会有所帮助。

答案 1 :(得分:0)

错误并不总是在标头中发送。 有时错误来自 HTML 消息,比如 NGINX 在你到达后端之前告诉你一些事情:

<html>
<head><title>413 Request Entity Too Large</title></head>
<body>
<center><h1>413 Request Entity Too Large</h1></center>
<hr><center>nginx</center>
</body>
</html>

在这些情况下,您应该使用 if (error.includes('413 Request Entity Too Large')) {...}

相关问题