2016-11-23 35 views
4

我的所有后端API请求都会在头文件中返回新的令牌信息,即使它们会引发异常。在下一个请求中,我需要发送这些新的令牌信息。Angular 2 - 从Http请求获取头文件

所以我试图找出这样做的唯一标准的方式,所以我想:

let requestOptions = new RequestOptions(Object.assign({ 
     method: method, 
     url: environment.apiHost + url, 
     body: body, 
     headers: authenticatedRequest ? this.requestService.getAuthHeaders() : this.requestService.getJsonHeaders(), 
     withCredentials: authenticatedRequest 
    })); 

this.http.request(new Request(requestOptions)) 
     .map((res:Response) => { this.storageService.setAuthInfo(res.headers); res.json() }) 
     .catch((error:any) => Observable.throw(error.json().error || 'Server error')); 

我现在面临的问题是,当我subscribe这种方法, res变量正在返回undefined

你对我有什么建议?

回答

3

问题是您必须明确从您的map函数返回res.json(),因为您使用的是{}

this.http.request(new Request(requestOptions)) 
    .map((res:Response) => { 
     this.storageService.setAuthInfo(res.headers); 
     return res.json(); 
    }) 
    .catch((error:any) => Observable.throw(error.json().error || 'Server error')); 

类似answer here

+0

非常感谢! –

+0

它解决了相关的问题,但我正面临一个新问题:发生错误时,它不会传递map(),因此它不会注册新的标记。解决方案将在catch()上设置新的标记('this.storageService.setAuthInfo(res.headers);'),除非有成功和错误返回时调用的请求方法。任何想法? –

+0

@PaspRuby我会说它的价值开放的新问题,其他人也可以跳入思想.. –