代码之家  ›  专栏  ›  技术社区  ›  k.vincent

无法将HTTP响应映射到接口

  •  0
  • k.vincent  · 技术社区  · 8 年前

    以下代码在Chrome控制台上返回: ERROR TypeError: t.json(...).map is not a function 这个 ng serve -prod ng test --sm=false 运行良好。

    ....
    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 回复  |  直到 8 年前
        1
  •  1
  •   Fenton    8 年前

    这个 .map 方法在数组而不是对象上可用。

    导致错误的最可能原因是,如果您有这样的响应:

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

    您需要使用:

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

    如果JSON实际上与您的接口相一致,您甚至可以简单地使用以下内容:

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