2017-07-15 55 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