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

来源:互联网 发布:程序员软件工程师 编辑:程序博客网 时间:2024/06/03 20:19
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 用户外部调用发起请求