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版权协议,转载请附上原文出处链接和本声明。