import { Injectable, EventEmitter } from '@angular/core';
import { Http, Response, Headers, Jsonp, URLSearchParams } from '@angular/http';
import { Observable, Subject } from "rxjs";
import { serverRes } from './base.struct';
import { errorCode } from '../../common/param';
import { Router } from "@angular/router";
@Injectable()
export class BaseService {
constructor(
private jsonp: Jsonp,
private baseHttp: Http,
private go:Router
) { }
handleError(error: Response | any) {
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;
}
createRequstParam(data: any, jsOnp= false): any {
let params = new URLSearchParams();
for (let key in data) {
params.set(key, data[key])
}
if (jsOnp== true) {
params.set('callback', 'JSONP_CALLBACK');
}
return params;
}
createHeaders() {
let headers = new Headers();
headers.append('Content-Type', 'application/x-www-form-urlencoded');
return headers;
}
checkResponeCode(res: Response) {
//this.questStaus.questStatus.emit("remove");
let serverRespOnse= res.json() as serverRes
if (serverResponse.code != errorCode.CODE_OK) {
console.error("请求代码不是OK,error code is " + serverResponse.code);
console.error(serverResponse.desc)
}
if (serverResponse.code == errorCode.CODE_NOT_LOGIN || serverResponse.code == errorCode.CODE_EXPIRE) {
//this.goToPage.navigateByUrl("/view/login");
}
return serverResponse;
}
queryServer(query: { url: string, method: string }, param = {}): Promise
{
//this.questStaus.questStatus.emit("add");
let form = this.createRequstParam(param);
switch (query.method) {
case "post":
return this.baseHttp.post(query.url, form, { headers: this.createHeaders() }).toPromise().then(this.checkResponeCode.bind(this)).catch(this.handleError);
case "get":
default:
return this.baseHttp.get(query.url, { search: form }).toPromise().then(this.checkResponeCode.bind(this)).catch(this.handleError);
}
}
changeAttribut(arr: [any], id: number, name: string, value: any): string | number {
for (let key in arr) {
if (arr[key].id == id) {
arr[key][name] = value;
return key;
}
}
return '';
}
}