美文网首页
Angular10封装http

Angular10封装http

作者: 小米和豆豆 | 来源:发表于2021-05-17 19:42 被阅读0次
BaseService.ts
import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Router } from '@angular/router';
import { AppCommon } from "../common/app-common";

@Injectable()
export class BaseService {
    public path: string = '';
    public protocol = document.location.protocol;
    public downUrl: string = this.protocol + '//' + window.location.host; //下载地址
    constructor(
        public httpClient: HttpClient,
        public router: Router
    ) { }

    getParams(data: any, isJsonp = false): HttpParams {
        let params = new HttpParams();
        for (const key in data) {
            let val = data[key];
            if (typeof val == 'function') { continue; }
            params = params.set(key, val);
        }
        if (isJsonp) {
            params = params.set('callback', 'JSONP_CALLBACK');
        }
        return params;
    }

    jsonCall(data: any, url: string, type:string = 'get', withToken = true): any {
        // 使用httpClient模块开始
        // const lang = Language.getLanguage();
        let myHeader = new HttpHeaders();
        //myHeader.append('Accept-Language', lang);
        // if (!!AppCommon.userInfo) {
        //  myHeader.append('tenantId', AppCommon.userInfo.organization.id);
        //  myHeader.append('userId', AppCommon.userInfo.id);
        // }
        let options = { observe: 'response', headers: myHeader };
        return new Promise((resolve, reject) => {
            if (type == 'get' || type == 'delete') {
                let obj:any = Object.assign(options, { params: this.getParams(data) });
                this.httpClient[type](url, obj)
                    .subscribe(res => {
                        try {
                            this.processCallback(resolve, reject, data, res);
                        } catch (error) {
                            const data={
                                errData:error
                            }
                            this.processCallback(resolve, reject, data);
                        }

                    }, err => {
                        this.processCallback(resolve, reject, data, err);
                    });
            } else {
                this.httpClient[type](url, data, options)
                    .subscribe(res => {
                        try {
                            this.processCallback(resolve, reject, data, res);
                        } catch (error) {
                            const data={
                                errData:error
                            }
                            this.processCallback(resolve, reject, data);
                        }
                    }, err => {
                        this.processCallback(resolve, reject, data, err);
                    });
            }
        });
    }

    processCallback(resolve: Function, reject: Function, params: any, data?: any) {
        //活跃用户刷新token
        // if (data.headers.get('authorization') && data.headers.get('refreshtoken')) {
        //  let obj = {
        //      access_token: data.headers.get('authorization'),
        //      refresh_token: data.headers.get('refreshtoken')
        //  }
        // }
        if (!!params&&!!params.errData){
             reject({ status_code: -2000, 'msg': params.errData });
             return
        };
        if (data['status'] == '200' || data['status'] == '201') {
            resolve(data.body);
        } else if (data['status'] == '401') {
            AppCommon.userInfo = null;
        } else if (data['status'] == '400') {
            reject({ 'status_code': 400, 'msg': data.error.message } || { status_code: '-2000' });
        } else if (data['status'] == '403') {
            reject({ 'status_code': 403, 'msg': data.error.message } || { status_code: '-2000' });
        } else if (data['status'] == '404') {
            reject({ 'status_code': 404, 'msg': data.error.message } || { status_code: '-2000' });
        } else {// 请求出错
            reject({ 'status_code': data['status'], 'msg': data.error } || { status_code: '-2000' });
        }
    }

相关文章

  • springcloud ribbon 的简单使用

    RestTemplate 对http请求通信的封装,封装了http请求,方便的请求http接口。 Ribbon r...

  • angular http 封装

  • 封装HTTP请求

    每次访问网址,需要配置网络连接的很多属性(e.i. 请求方法、连接超时时间、读取资源超时时间等),很麻烦,所以这里...

  • 初识封装(Http)

    1、方法参数过多时,可用实例类将参数抽取出来,再用构造函数实例化。 2、暴露给外部一个方法public,其余用pr...

  • 封装http请求

    import 'package:dio/dio.dart'; import 'dart:async'; impor...

  • HTTP 请求封装

    前言 我们在做项目的时候经常需要用到HTTP请求,但是org.apache.http.client不满足HTTPS...

  • Qt Http 封装

     工作中用Qt开发项目时有用到Http协议,对Http有做一个算比较全面的封装,同时还包含对JSON格式的解析,整...

  • python上传视频

    http简单封装 上传视频

  • HTTP(一)

    1. HTTP原理 http请求封装在应用层数据包中,再封装到tcp数据包中,再封装到ip数据包中,再封装到以太网...

  • Koa(五、源码浅析)

    基础http请求 针对http基础请求简单封装 效果上面两者相同,下面继续封装 js的getter和setter ...

网友评论

      本文标题:Angular10封装http

      本文链接:https://www.haomeiwen.com/subject/zeuyjltx.html