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”