HTTP GET 抛出类型错误:无法读取未定义的属性(读取“长度”)

问题描述 投票:0回答:1

我想使用一种简单的方法来检查互联网连接。 我们在服务器上托管了一个文件,我只是想检查我们是否可以看到它。

该文件包括: { “状态”:“成功” }

在我的 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 甚至浏览器查看它(但请求甚至没有执行)。

angular get typeerror httpclient
1个回答
0
投票

我认为你应该得到一个文件,所以你可以设置

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;
        }
    });
}
© www.soinside.com 2019 - 2024. All rights reserved.