我正在尝试使用角度为2的HttpClient通过REST获取数据.我在这里按照角度教程https://angular.io/tutorial/toh-pt6并在英雄和HTTP部分下你会看到这段代码用于通过http获取英雄数据.
getHeroes(): Promise<Hero[]> {
return this.http.get(this.heroesUrl)
.toPromise()
.then(response => response.json().data as Hero[])
.catch(this.handleError);
}
Run Code Online (Sandbox Code Playgroud)
以下是我在我的应用程序中编写的类似版本
fetch(startIndex: number, limit: number): Promise<Order[]> {
let url = this.baseUrl + "&startIndex=" + startIndex + "&limit=" + limit;
return this.http.get(url)
.toPromise()
.then(response => response.json().results as Order[])
.catch(this.handleError);
}
Run Code Online (Sandbox Code Playgroud)
我正在使用InteliJ Idea,并且在调用response.json()时有一条红线,即使我尝试使用ng build构建,我也会收到错误.
属性'json'在'Object'类型上不存在.
您可能会注意到,而不是json().data我json().results.这是因为根据教程,服务器响应了一个具有data字段的对象,但我自己的服务器使用具有results字段的对象进行响应.如果您向下滚动教程,您会看到这一点.
请注意服务器返回的数据的形状.此特定的内存中Web API示例返回具有data属性的对象.您的API可能会返回其他内容.调整代码以匹配您的Web API.
为了解决这个问题,我试过这样的事情
(response: Response) => response.json().results as Order[]
Run Code Online (Sandbox Code Playgroud)
当我这样做时,.json()方法已被解决,但另一个错误弹出
Promise类型不存在属性结果
我尝试通过定义一个接口来修复它
interface OrderResponse {
orders: Order[]; …Run Code Online (Sandbox Code Playgroud) 我的API服务存在问题.此服务连接到我的nodejs后端api.
错误说
ERROR TypeError: res.json is not a function
Run Code Online (Sandbox Code Playgroud)
我在最近更新此服务后使用HTTPClient而不是Http时收到此错误.我得到这个响应因为我错过了旧的http与新?如果那样的情况是新的响应,我该如何使用它?
import { Injectable } from '@angular/core';
import { environment } from '../../environments/environment';
import { HttpHeaders, HttpClient, HttpParams } from '@angular/common/http';
import { Response } from '@angular/http';
import { Observable } from 'rxjs/Rx';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';
import { JwtService } from './jwt.service';
@Injectable()
export class ApiService {
constructor(
private http: HttpClient,
private jwtService: JwtService
) {}
private setHeaders(): HttpHeaders {
const headersConfig = {
'Content-Type': 'application/json',
'Accept': 'application/json'
};
if …Run Code Online (Sandbox Code Playgroud)