Javascript 可观察订阅,返回响应,Can';t访问字段

Javascript 可观察订阅,返回响应,Can';t访问字段,javascript,http,angular,rxjs,observable,Javascript,Http,Angular,Rxjs,Observable,这里,这是我观察到的: userLogin(formData: Object):Observable<Response> { return this.http.post(apiURL + '/api/logon', formData) .map((response: Response) => { return response.json(); } }) } 那么我做错了什么 编辑: Console.log

这里,这是我观察到的:

userLogin(formData: Object):Observable<Response> {
    return this.http.post(apiURL + '/api/logon', formData)
        .map((response: Response) => {
            return response.json();
        }
    })
}
那么我做错了什么

编辑:

Console.log输出以下内容:

Object {
    pappassword:"2f636cc3f8ffeda00dfe448fc483ce3"
    success:true
    uamip:"192.168.182.1"
    uamport:"3990"
    username:"jh"
    userurl: "http://www.gstatic.com/generate_20"
}

返回类型userLogin方法应该是可观察的,这里它代表您的响应数据类型/接口。您可以使用响应数据模型创建一个接口,并将其用作数据类型

interface UserInterface {
  pappassword: string
  success: boolean
  uamip: string
  uamport: string
  username: string
  userurl: string
}
在用户登录方法中:

userLogin(formData: Object):Observable<UserInterface> {
  ...
}
userLogin(formData:Object):可观察{
...
}

我们可以只使用
可观察的
,但这是TypeScript的最佳实践。

返回类型userLogin方法应该是
可观察的
,这里T表示您的响应数据类型/接口。您可以使用响应数据模型创建一个接口,并将其用作数据类型

interface UserInterface {
  pappassword: string
  success: boolean
  uamip: string
  uamport: string
  username: string
  userurl: string
}
export class UserPayload{
constructor(public pappassword: string,
            public success: boolean,
            public uamip: string,
            public uamport: string,
            public username: string,
            public userurl: string){}//using ts shorthand for properties in constructor
}

userLogin(formData: Object):Observable<UserPayload> {
return this.http.post(apiURL + '/api/logon', formData)
    .map((response: UserPayload) => {
        return response.json();
    }).catch((error:any)=> Observable.throw(error.json() || 'Server Error'));
}

this.auth.userLogin(forData)
  .subscribe((result) => {
    console.log(result); // this logs the response from server object
     console.log(result.username); //this should work now
 },
 e=>{console.log(e)}
 );
在用户登录方法中:

userLogin(formData: Object):Observable<UserInterface> {
  ...
}
userLogin(formData:Object):可观察{
...
}
我们可以只使用
可观察的
,但这是TypeScript的最佳实践。

导出类用户负载{
export class UserPayload{
constructor(public pappassword: string,
            public success: boolean,
            public uamip: string,
            public uamport: string,
            public username: string,
            public userurl: string){}//using ts shorthand for properties in constructor
}

userLogin(formData: Object):Observable<UserPayload> {
return this.http.post(apiURL + '/api/logon', formData)
    .map((response: UserPayload) => {
        return response.json();
    }).catch((error:any)=> Observable.throw(error.json() || 'Server Error'));
}

this.auth.userLogin(forData)
  .subscribe((result) => {
    console.log(result); // this logs the response from server object
     console.log(result.username); //this should work now
 },
 e=>{console.log(e)}
 );
构造函数(公共密码:字符串, 公众的成功:布尔, 公共uamip:string, 公共uamport:string, 公共用户名:string, public userurl:string){}//在构造函数中使用ts速记表示属性 } userLogin(formData:Object):可观察{ 返回此.http.post(apirl+'/api/logon',formData) .map((响应:UserPayload)=>{ 返回response.json(); }).catch((error:any)=>Observable.throw(error.json()| |“服务器错误”); } this.auth.userLogin(forData) .订阅((结果)=>{ console.log(result);//记录来自服务器对象的响应 console.log(result.username);//现在应该可以了 }, e=>{console.log(e)} );
导出类用户负载{
构造函数(公共密码:字符串,
公众的成功:布尔,
公共uamip:string,
公共uamport:string,
公共用户名:string,
public userurl:string){}//在构造函数中使用ts速记表示属性
}
userLogin(formData:Object):可观察{
返回此.http.post(apirl+'/api/logon',formData)
.map((响应:UserPayload)=>{
返回response.json();
}).catch((error:any)=>Observable.throw(error.json()| |“服务器错误”);
}
this.auth.userLogin(forData)
.订阅((结果)=>{
console.log(result);//记录来自服务器对象的响应
console.log(result.username);//现在应该可以了
},
e=>{console.log(e)}
);

console.log(结果)的输出是什么;?我觉得一切都很好。这可能只是一个类型错误,因为类型响应上实际上不存在属性“result”。您正在从服务返回Observable。但您应该返回Observable,或者更好,创建您自己的数据模型并返回Observable(我相信称为Identity的模型适合您的情况)。@SabbirRahman用控制台的回答更新了问题。@SureSrepyan不,不完全是。我无法生成
结果。用户名
。请稍等一下,结束主题内容好吗?错误:类型“Response”上不存在属性“username”。console.log(result)的输出是什么;?我觉得一切都很好。这可能只是一个类型错误,因为类型响应上实际上不存在属性“result”。您正在从服务返回Observable。但您应该返回Observable,或者更好,创建您自己的数据模型并返回Observable(我相信称为Identity的模型适合您的情况)。@SabbirRahman用控制台的回答更新了问题。@SureSrepyan不,不完全是。我无法生成
结果。用户名
。您能等一下结束主题吗?错误:类型“Response”上不存在属性“username”