无法使用 Angular 2 rc5 发出 http 请求
Posted
技术标签:
【中文标题】无法使用 Angular 2 rc5 发出 http 请求【英文标题】:Unable to make http request with Angular 2 rc5 【发布时间】:2016-12-18 22:29:30 【问题描述】:我刚刚升级到Angular 2 RC 5
,由于我不知道的原因,我无法发出任何 http 请求(即从未发出过请求/不会出现在浏览器日志中)。
这是在今天升级之前有效的代码。
console.log("Let's call github");
let url = 'https://raw.githubusercontent.com/angular/angular/master/LICENSE';
return this.get(url).do(d=>console.log('success'));
当我的组件调用包含此代码的函数时,会输出Let's call github
,但随后不会发出请求。我确信来自@angular/http
的Observable
和Http
已正确导入,因为今天早上同样的代码有效。我的第一个想法是我错过了HttpModule
,但我已经确认我将它导入到我的主要AppModule
事实上,如果我注释掉 HttpModule
导入,我可以看到它没有任何区别。错误是一样的,如下:
Exception: TypeError: this._body is null
这是堆栈跟踪的摘录(底部是调用上面引用的函数的行):
【问题讨论】:
【参考方案1】:2016 年 8 月 12 日更新
此问题已得到解决,可能会在下一个版本中修复。当前的解决方法是跳过 GET
请求上的 content-type
设置,或将 body=''
显式设置为请求选项。
链接:Gihub discussion
原答案
错误似乎与我在每个 http 请求之前运行的函数中的代码块有关。因为我与之交互的 API 需要 JSON
内容,所以我有以下内容(options
指的是用于每个请求的 RequestOptions
对象):
//set content to JSON
if(!options.headers.has("Content-Type"))
options.headers.append("Content-Type", "application/json")
如果我注释掉这些行,则请求成功。所以我在想,从Angular 2 rc 5
开始,如果请求正文为空,这个块会抛出一个错误(就像我来自 OP 的get
请求一样)。
如果我的直觉是正确的,这种行为变化是由this commit 引起的(rc 5
的新手)
fix(http):将传递给请求的对象转换成字符串
我敢打赌,当我设置内容类型标头时,Angular 会尝试为我提供帮助并将请求正文字符串化。当然没有GET
,因此错误。
【讨论】:
以上是关于无法使用 Angular 2 rc5 发出 http 请求的主要内容,如果未能解决你的问题,请参考以下文章
Angular2 RC5:无法绑定到“属性 X”,因为它不是“子组件”的已知属性