以下代码在Chrome控制台上返回:ERROR TypeError: t.json(...).map is not a function
ng serve -prod
和ng test --sm=false
正常运行。
我想将结果映射到Interface中的模型,并以HTML格式输出。
....
export interface UsersData {
_id: number;
email: string;
fullName: string;
}
export class RetrieveUsrData {
private issuesUrl = 'http://localhost:4000/users';
getUserDetails(): Observable<UsersData[]> {
return this.http.get(this.issuesUrl)
.map(this.extractData)
}
extractData(result: Response): UsersData[] {
console.log(JSON.stringify( result.json()) );
return result.json().map(usr => {
return {
_id: usr.message._id,
email: usr.message.email,
fullName: usr.message.fullName
}
}).subscribe(result => result = result);
}
constructor(private http: Http) {}
}
...
我一直在检查一些问题,例如mapping a HTTP response to a JSON and then mapping the JSON to a model,并将我的代码/方法更改为:
extractData(result: Response): UsersData[] {
return result.json().map(res => ({
_id:res.message._id,
email:res.message.email,
fullName:res.message.fullName
}) as UsersData)
.subscribe(result => result = result); ;
}
但我仍然遇到同样的错误。
答案 0 :(得分:1)
.map
方法适用于数组,而不是对象。
您错误的最可能原因是,如果您有这样的回复:
{
someKey: [1, 2, 3, 4]
}
您需要使用:
result.json().someKey.map( //...
如果JSON实际上符合您的界面,您甚至可以简单地使用以下内容:
return <UsersData[]>result.json().someKey;