无法将HTTP响应映射到Interface

时间:2017-10-09 13:27:48

标签: angularjs typescript angular-material2

以下代码在Chrome控制台上返回:ERROR TypeError: t.json(...).map is not a function ng serve -prodng 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); ;
}

但我仍然遇到同样的错误。

1 个答案:

答案 0 :(得分:1)

.map方法适用于数组,而不是对象。

您错误的最可能原因是,如果您有这样的回复:

{
    someKey: [1, 2, 3, 4]
}

您需要使用:

result.json().someKey.map( //...

如果JSON实际上符合您的界面,您甚至可以简单地使用以下内容:

return <UsersData[]>result.json().someKey;