2017-07-15 74 views
0

我正在嘗試爲我的角度應用創建登錄功能。我正在使用角4(它似乎沒什麼像angularjs)無法獲取來自Angular 4的HTTP響應

我想解決如何使用HTTP,我只是卡住了,已經有4個小時了。

我得到網頁上的這個錯誤:

login.component.ts (29,3): Type 'Promise<User>' is not assignable to type 'User'. Property 'id' is missing in type 'Promise<User>'.

,這在控制檯上: login.component.ts (30,25): Property 'json' does not exist on type 'User'.

爲我的生活中,我似乎無法得到實際響應從服務器發送(見下文)

我已經沿着angular.io上的HTTP教程(https://angular.io/tutorial/toh-pt6),我已經嘗試了許多變化與.subscribe,.ma p等

有人可以看看下面的代碼,幫助我嗎?

謝謝

這是訪問後端的組件。

export class loginComponent { 
SERVICE_URL = "http://localhost:80/play/classes/index.php?fn=userLogin"; 
model = new Login("", ""); 
user: User; 
constructor(private http: Http) {} 

onSubmit(){ 
    console.log("submission complete!"); 
    console.log(this.model.username); 
    console.log(this.model.pass); 

    let params: URLSearchParams = new URLSearchParams(); 
params.set('username', this.model.username); 
params.set('password', this.model.pass); 
    this.user = this.doLogin(params); 
    console.log(this.user.json); 

} 

doLogin(params: URLSearchParams): Promise<User>{ 

    return this.http.get(this.SERVICE_URL, new RequestOptions({"search": params})) 
     .toPromise() 
     .then(response => response.json().data as User) 
     .catch(this.handleError); 

} 

get diagnostic() { return JSON.stringify(this.model); } 

private handleError(error: any): Promise<any> { 
    console.error('An error occurred', error); // for demo purposes only 
    return Promise.reject(error.message || error); 
} 
} 

這是響應我從服務器獲取,但實際上並不能在應用程序中使用:

{"id":"3","username":"jamiemac262","password":"123456","dob":"1993-03-24","email":"[email protected]","steamID":null,"age":24}

回答

1

你沒有解決的承諾訪問數據

this.doLogin(params).then((data=>console.log(data)); 

使用then運營商獲取數據

更新您不使用JSON映射和分離可觀察到的,並承諾

doLogin(params: URLSearchParams): Promise<User>{ 

let promise = this.http.get(this.SERVICE_URL, new RequestOptions({"search": params})) 
     .map(response => <User>response.json()) 
     .catch(this.handleError); 
    return promise.toPromise(); 
} 

this.doLogin(params).then((data)=>console.log(data),()=>{}); 
+0

我只是嘗試這樣做,有一個輕微的語法錯誤(你有一個額外的托架'後。於是(' –

+0

當我用你的例子中,控制檯說'未定義'它試圖打印'數據' –

+0

你已經在你的'doLogin()'方法中使用'then'。你是否可以在teamviewer中使用? – Aravind