angular学习总结八-请求service封装

import { Injectable, Injector, EventEmitter } from '@angular/core';
import { Http, Response, Headers } from '@angular/http';
import { URLSearchParams, Jsonp } from '@angular/http';
import { Observable } from 'rxjs';
@Injectable()
export class RequestService {
    private http: Http;
    constructor( private injector: Injector ) {
        this.http = injector.get(Http);
    }
    private handleError(error: Response | any): boolean {
        console.error('baseService received request errorr');
        console.log(error);
        let errMsg: string;
        if (error instanceof Response) {
            const body = error.json() || '';
            const err = body.error || JSON.stringify(body);
            errMsg = `${error.status} - ${error.statusText || ''} ${err}`;
        } else {
            errMsg = error.message ? error.message : error.toString();
        }
        Observable.throw(errMsg);
        return false;
    }
    private createRequstParam(data: any): any {
        const params = new URLSearchParams();
        for (let key in data) {
            params.set(key, data[key])
        }
        return params;
    }
    private createHeaders() {
        const headers = new Headers();
        headers.append('Content-Type', 'application/x-www-form-urlencoded');
        return headers;
    }
    private checkResponeCode(res: Response) {
        const serverResponse = res.json() as { code: number, desc: string, data: any };
        return serverResponse;
    }
    queryServer(query: { url: string, method: string }, param: any): Promise<any> {
        const form = this.createRequstParam(param);
        switch (query.method) {
            case 'post':
                return this.http.post(query.url, form, { headers: this.createHeaders() }).toPromise()
                .then(this.checkResponeCode.bind(this)).catch(this.handleError);
            case 'get':
            default:
                return this.http.get(query.url, { search: form }).toPromise()
                .then(this.checkResponeCode.bind(this)).catch(this.handleError);
        }
    }
}

说明

handleError用来处理请求异常,这里可以加功能,比如将异常发到到服务器端
checkResponeCode 一般服务器都会返回errorCode这里做全局错误处理
createHeader 用与创建header可以添加参数实现动态添加额外的header信息,比如token
createRequstParam 用来生成form表单、json、query string
queryServer 用户外部调用发起请求


版权声明:本文为qq_30101131原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。