簡體   English   中英

無法從Angular 4獲取HTTP響應

[英]Unable to get HTTP response from Angular 4

我正在嘗試為Angular應用創建登錄功能。 我正在使用Angular 4(似乎與Angularjs沒什么不同)

我正在嘗試找出如何使用HTTP的方法,並且被卡住了。

我在網頁上收到此錯誤:

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( https://angular.io/tutorial/toh-pt6 )的HTTP教程,並且嘗試了.subscribe,.map等多種變體。

這是訪問后端的組件:

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":"jamiemac262@xxxx.co.uk","steamID":null,"age":24}

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

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),()=>{});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM