Return 来自服务的组件中的 http 状态代码 - Angular 2
Return http status code in component from Service - Angular 2
我在 return 将我的 Http 服务中的对象捕获到我的组件时遇到问题:
这是我的服务代码:
login(username,password){
let headers = new Headers();
headers.append('Content-Type','application/json');
return this.http.post(this.configEnvironment.url() + "oauth/access_token",
JSON.stringify(
{
username: username,
password: password,
grant_type: "password",
client_id: "xxxx",
client_secret: "xxxxx"
}
),
{ headers }
)
.map(res => res.json())
.catch((err:Response) => {
let details = err.json();
return Observable.throw(details);
});
}
这是我的组件中的代码:
this.loginService.login(this.model.username,this.model.password)
.subscribe(
data => console.log(data),
error => {
// var details = error.json();
console.log(error);
},
() => console.log("Finished")
);
当我 return 像这样的 json 错误时它工作正常:
let details = err.json();
return Observable.throw(details);
但是当我尝试像这样添加 http 响应状态代码时:
return { status: err.status, error: Observable.throw(details) }
它给我一个错误:
“'(err: Response) => { status: number; error: ErrorObservable; }' 类型的参数不可分配给 '(err: any, caught: Observable) 类型的参数=> 可观察输入'。
输入'{状态:数字;错误:错误可观察; }' 不可分配给类型 'ObservableInput'。
输入'{状态:数字;错误:错误可观察; }' 不可分配给类型 'ArrayLike<{}>'。
属性 'length' 类型中缺少 '{ status: number;错误:错误可观察; }'."
我的目标只是在 catch 的 return 中包含 http 响应代码。
试试下面的代码,
.catch((err:Response) => {
let details = {detail:err.json(),status: err.status};
return Observable.throw(details);
});
试试这个
return [{ status: err.status, error: err.json() }]
这应该有效
或者您也可以简单地在 catch 块中发送整个 err
对象,并在订阅时检查状态代码,这也有效。
return err
并在订阅时使用
err.status
我在 return 将我的 Http 服务中的对象捕获到我的组件时遇到问题:
这是我的服务代码:
login(username,password){
let headers = new Headers();
headers.append('Content-Type','application/json');
return this.http.post(this.configEnvironment.url() + "oauth/access_token",
JSON.stringify(
{
username: username,
password: password,
grant_type: "password",
client_id: "xxxx",
client_secret: "xxxxx"
}
),
{ headers }
)
.map(res => res.json())
.catch((err:Response) => {
let details = err.json();
return Observable.throw(details);
});
}
这是我的组件中的代码:
this.loginService.login(this.model.username,this.model.password)
.subscribe(
data => console.log(data),
error => {
// var details = error.json();
console.log(error);
},
() => console.log("Finished")
);
当我 return 像这样的 json 错误时它工作正常:
let details = err.json();
return Observable.throw(details);
但是当我尝试像这样添加 http 响应状态代码时:
return { status: err.status, error: Observable.throw(details) }
它给我一个错误:
“'(err: Response) => { status: number; error: ErrorObservable; }' 类型的参数不可分配给 '(err: any, caught: Observable) 类型的参数=> 可观察输入'。 输入'{状态:数字;错误:错误可观察; }' 不可分配给类型 'ObservableInput'。 输入'{状态:数字;错误:错误可观察; }' 不可分配给类型 'ArrayLike<{}>'。 属性 'length' 类型中缺少 '{ status: number;错误:错误可观察; }'."
我的目标只是在 catch 的 return 中包含 http 响应代码。
试试下面的代码,
.catch((err:Response) => {
let details = {detail:err.json(),status: err.status};
return Observable.throw(details);
});
试试这个
return [{ status: err.status, error: err.json() }]
这应该有效
或者您也可以简单地在 catch 块中发送整个 err
对象,并在订阅时检查状态代码,这也有效。
return err
并在订阅时使用
err.status