从Service - Angular 2返回组件中的http状态代码

时间:2016-10-16 18:07:43

标签: angular angular2-services

我遇到了将Http Service中的对象返回到我的组件中的问题:

以下是我服务中的代码:

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")
            );

当我像这样返回json错误时,它工作正常:

let details = err.json();
    return Observable.throw(details);

但是当我尝试添加像这样的http响应状态代码时:

return  { status: err.status, error: Observable.throw(details) }

它给我一个错误:

“类型的参数”(错误:响应)=> {status:number; error:ErrorObservable;}'不能分配给'(err:any,caught:Observable)=>类型的参数ObservableInput”。   输入'{status:number;错误:ErrorObservable; }'不能赋值为'ObservableInput'。     输入'{status:number;错误:ErrorObservable; }'不能分配给'ArrayLike< {}>'。       类型'{status:number;错误:ErrorObservable; }”。“

我的目标只是在catch的返回中包含http响应代码。

2 个答案:

答案 0 :(得分:4)

尝试以下代码,

.catch((err:Response) => {
            let details = {detail:err.json(),status: err.status};
            return Observable.throw(details);
 });

答案 1 :(得分:0)

只需尝试一下

return  [{ status: err.status, error: err.json() }]

这应该有效

或者你也可以简单地在catch块中发送整个err对象,并在订阅时检查状态代码,这个也可以。

 return  err

并在订阅时使用

err.status