我正在尝试使用API网址。我使用以下代码调用API。
import {HttpClient, HttpClientModule, HttpParams} from "@angular/common/http";
@Injectable()
export class PropertyPrefService {
constructor(private http: HttpClient,
private configurationService:Configuration) {}
public searchProjects(propFilter:string):any{
let temp:any;
const options = propFilter ?
{
params: new HttpParams().set('query', propFilter)
} : {};
return this.http.get<any>(this.configurationService.propertySystemApiUrl, options)
.subscribe((results:any) => {
console.log(results);
});
}
在Angular代码中,我没有得到任何回复并且收到错误:
(未知网址)的Http失败响应:0未知错误“。
但是,当我在Chrome上打开开发者工具时发出请求时,我看到响应是从服务器收到的。
网址是“https:// ...”网址,而不是“http:// ...”。
答案 0 :(得分:4)
问题是Angular Universal使用Express,安全性验证服务器的SSL证书;我使用了自签名SSL证书。
解决方案是将NODE_TLS_REJECT_UNAUTHORIZED=0
添加到您的环境中以禁用Node.js中的SSL验证。您应该仅在开发中设置它;在生产中它是非常危险的。
答案 1 :(得分:2)
您不在相同的域,相同的协议,后端和前端之间的相同端口。
答案 2 :(得分:2)
同意@StephanRauh,并希望向他添加几分。当请求未发出或由于某种原因无法与服务器通信时,就会发生这种情况。
原因可能是:
答案 3 :(得分:1)
引用Sander Elias on Google Groups:
“错误0是您在请求未发出时获得的。最常见的原因是服务器上的CORS配置不正确。让我改为:在98%的情况下,这是一个服务器端问题。“
答案 4 :(得分:1)
以防万一其他人迷失了方向,这些解决方案都不适合我。对我有用的是关闭uBlock Origin。出于明显的原因,它阻止了其中包含“ ad”一词的所有网址。
答案 5 :(得分:0)
我有完全相同的问题。我能够在Chrome开发者工具中看到结果。但我总是收到Http failure response for (unknown url): 0 Unknown Error
错误消息。
就我而言,原因是我使用responseType:'text'
来查询有效负载text/html
。但由于某种原因,这并不兼容。我不得不切换到responseType: 'blob'
并使用FileReader
将blob转换为字符串。
因此,如果返回的内容与您配置的responseType
不匹配,我猜您会遇到同样的问题。顺便说一下,它是json
。
this.httpClient.get(url, {responseType: 'blob'})
.subscribe(data => {
const reader = new FileReader();
reader.onloadend = (e) => {
const readerResult = reader.result;
console.log(readerResult); // Print blob content as text
};
reader.readAsText(data, 'UTF-8');
}, error => console.log(error));
答案 6 :(得分:0)
从iPhone / iPad设备测试角度应用程序时遇到了这个问题。应用在桌面上运行良好。我在节点服务器上启用了cors,但仍然收到此错误。因此,我做了以下解决。
使用IP ng serve --host 192.168.1.10
使用IP的Point API: 在environment.ts中,我将URL更改为以下内容:
apiUri: 'http://192.168.1.10:9000/api'
现在我可以从移动设备访问URL。
答案 7 :(得分:0)
TL; DR:/etc/hosts
缺少域名输入。
在Angular Universal中,我遇到了一个问题,即SSR部分由于该服务器端渲染发生在服务器(;)上而引发了该错误。
说我的网站在https://myproject.com/上并且运行良好。当您直接点击任何URL时,SSR将启动。现在,如果SSR必须进行API调用,它将向本地网络中的https://myproject.com/api/blah/show发出HTTP请求。这就是它抛出错误的地方。
要进行调试,我尝试在VPS上运行curl https://myproject.com/api/blah/show
,但会收到错误消息。
要解决此问题,我必须将以下行添加到我的/etc/hosts
文件中:
127.0.0.1 myproject.com
此后,curl
命令和SSR都可以正常工作!
堆栈:
答案 8 :(得分:0)
当我尝试在我的角度项目中使用Azure搜索服务时遇到了这个问题。 然后,当我启用了接受来自所有来源的请求的CORS时,我便开始获得响应。
请在Chrome中检查开发人员工具(控制台)。它可以使您对请求有一些见识。