我正在使用Angular 2.2.3并使用带有rxjs的observable进行http请求。标题显示在Chrome控制台中,但响应中标题对象上的标题列表为空。 这是代码:
登录功能
login(body: Object): Observable<Response> {
return this.http.post(this.url, body);
}
通过订阅可观察的
来调用登录功能this.authService.login(values).subscribe(res => {
console.log(res.headers.get("Authorization"))
console.log(res)
},
err => {
console.log(err);
});
我做错了什么或我应该做些什么?
Chrome网络控制台响应标题
Console.log结果
null
值为res.headers.get("Authorization")
如您所见,标题列表为空。
非常感谢你的帮助!
答案 0 :(得分:3)
我找到了解决问题的方法。事实证明,Angular在幕后使用XMLHttpRequest。因此,可以以编程方式向客户端显示的标题&#34; (使用Angular函数)必须位于标题Access-Control-Expose-Headers
的列表中。当我们将请求发送回客户端时,必须在后端创建此列表。以下是我使用ExpressJS启用Authorization标头的方法:
app.use((req, res, next) => {
// List of headers that are to be exposed to the XHR front-end object
res.header('Access-Control-Expose-Headers', 'Authorization');
next();
});
我在前端的初始代码保持不变,现在显示console.log
标题的Authorization
。
Documentation explaining why we need this header
这整个文档非常有趣,我认为我在API方面相当不错,但在阅读本文时我学到了很多东西: - )