我想使用一种简单的方法来检查互联网连接。 我们在服务器上托管了一个文件,我只是想检查我们是否可以看到它。
该文件包括: { “状态”:“成功” }
在我的 Angular 组件中:
#http = inject(HttpClient);
isOnline: boolean;
updateOnlineStatus(url: string): void {
console.log(this.#CLASS_NAME + '.updateOnlineStatus() - url', url);
this.#http.get<any>(url).pipe(
catchError((error) => {
console.log(this.#CLASS_NAME + '.updateOnlineStatus(), error', error);
this.isOnline = false;
return of(null);
})
).subscribe(response => {
if (response && response.status === 'success') {
this.isOnline = true;
} else {
this.isOnline = false;
}
});
}
但是当我调用该方法时,我得到:
LoginPage.updateOnlineStatus() - url https://xxx/status.json
login.component.ts:288 LoginPage.updateOnlineStatus(), error TypeError: Cannot read
properties of undefined (reading 'length')
at HttpHeaders.applyUpdate (http.mjs:222:27)
at http.mjs:195:58
at Array.forEach (<anonymous>)
at HttpHeaders.init (http.mjs:195:33)
at HttpHeaders.forEach (http.mjs:263:14)
at Observable._subscribe (http.mjs:2116:29)
at Observable._trySubscribe (Observable.js:37:25)
at Observable.js:31:30
at errorContext (errorContext.js:19:9)
at Observable.subscribe (Observable.js:22:21)
在网络选项卡上,我可以看到 GET 未执行,因此看起来 HttpClient 在此之前就失败了。
我做错了什么?
该文件存在,我可以使用 Postman 甚至浏览器查看它(但请求甚至没有执行)。
我认为你应该得到一个文件,所以你可以设置
responseType
来接受text
。
#http = inject(HttpClient);
isOnline: boolean;
updateOnlineStatus(url: string): void {
console.log(this.#CLASS_NAME + '.updateOnlineStatus() - url', url);
this.#http.get<any>(url, { responseType: 'text' }).pipe( // <- changed here!
catchError((error) => {
console.log(this.#CLASS_NAME + '.updateOnlineStatus(), error', error);
this.isOnline = false;
return of(null);
})
).subscribe(response => {
if (response && response.status === 'success') {
this.isOnline = true;
} else {
this.isOnline = false;
}
});
}