【发布时间】:2018-09-22 22:30:39
【问题描述】:
我对如何在 Angular 5 中为简单的 Get 请求创建一个好的标头感到困惑。
这是我目前所拥有的:
getUserList(): Observable<UserList[]> {
const headers = new Headers();
let tokenParse = JSON.parse(this.token)
headers.append('Authorization', `Bearer ${tokenParse}`);
const opts = new RequestOptions({ headers: headers });
console.log(JSON.stringify(opts));
const users = this.http.get<UserList[]>(this.mainUrl, opts)
return users
.catch(this.handleError.handleError);
}
这是我的 console.log 中的响应:
{"method":null,"headers":{"Authorization":["Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6ImYwODZlM2FiYTk0ZjVhMjVmNDhiNzlkYmI2YWUwOWY4YzE2MTUyMzg2N2I5MDZiY2MzNWQyNWJiYTZmYTE4YjEwZjA1MjZiNThkZjE2Y2FjIn0.eyJhdWQiOiJmMDExY2M1OC00MGNlLTQzYTktOGY3MS04NDI0OTRlM2E5OTciLCJqdGkiOiJmMDg2ZTNhYmE5NGY1YTI1ZjQ4Yjc5ZGJiNmFlMDlmOGMxNjE1MjM4NjdiOTA2YmNjMzVkMjViYmE2ZmExOGIxMGYwNTI2YjU4ZGYxNmNhYyIsImlhdCI6MTUyMzU1MTQ0NSwibmJmIjoxNTIzNTUxNDQ1LCJleHAiOjE1MjM1NTQ0NDUsInN1YiI6IjIiLCJzY29wZXMiOlsiYXV0aGVudGljYXRlZCIsImFuZ3VkcnUiXX0.E-WdQTl7nPDW0gj0rohfql-QgnAinzvDxPR-pySMrG07XFY9tA6Ex7IL23pDBmKDmQO8RcZKa0L5r6SRQq9_iqzMWzn5Zxp94J9TJrpZ2KGMoLR_FbK_tpC5G5q5vUnCe3q34sH7cPdT_2cI704OWWaYmIUKKpXWUIG0PJw_uKSJ_uOifPv59RZGQkoaQ9gPywDKe-uamm1Faug-Kk2YnFMoEJq7ou19zyxgdpX80ZTPUae67uB0PGLRuvxfGaqVsJ8k0NunAY3-pyUnBwR_3eeuOxf4TyfW2aiOJ9kuPgsfV4Z1JD7nMpNtTHMJaXEyNkBW8RlYHD1pj4dkdnsDmw"]},"body":null,"url":null,"withCredentials":null,"responseType":null}
看起来很漂亮。但是给了我这个错误
GET http://druang.dd:8080/user-list?_format=json403(禁止)
还有另一个线索可以解开这个谜团。在 Sublime 文本中,如果我将鼠标放在 opts 上,它会说:
src/app/services/userlist.service.ts(33,59) 中的错误:错误 TS2345: 'RequestOptions' 类型的参数不可分配给 输入'{标头?:HttpHeaders | { [标题:字符串]:字符串 |细绳[]; };观察?:“身体”;参数?:Ht...'。属性“标题”的类型 不兼容。 类型 'Headers' 不可分配给类型 'HttpHeaders | { [标题:字符串]:字符串 |细绳[]; }'。 类型 'Headers' 不可分配给类型 '{ [header: string]: string |细绳[]; }'。 “标头”类型中缺少索引签名。
有什么想法吗?? 这是完整的Git repo 感谢您的帮助!
【问题讨论】:
-
我认为您为 Headers 导入了错误的类尝试检查版本 5 中的 Angular 文档 http 服务已被 httpClient 服务弃用,但 httpClient 位于 @angular/common 中,另一个位于 @ angular/http 你不能混合这些类,因为它会导致错误。对我来说,您的错误看起来像是使用来自“@angular/common”的 http 和来自“@angular/http”的标头,而不是来自“@angular/common”的 HttpHeaders
-
嗨,谢谢@Nicu,这是我的导入:
import { HttpClient, HttpHeaders } from '@angular/common/http';根据角度documentation -
太棒了 :D @angular/http 它将被替换为 @angular/common/http 我想在 ng 6 中删除。
标签: angular header authorization bearer-token