属性 映射在 Observable 类型上不存在<ArrayBuffer>
Property map does not exist on type Observable<ArrayBuffer>
我试图从 Angular v4 更新到 Angular v6。
我正在将 Http
和 HttpModule
替换为 HttpClient
和 HttpClientModule
。
所以我在服务中从 @angular/common/http
导入了 HttpClient
并试图从 DBpedia 的 API.Earlier 中获取结果 我使用的是 @angular/http
的 Http
并且我的以下代码正在运行很好
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import {Jsonp, Headers, RequestOptions, URLSearchParams} from "@angular/http";
import {Store} from "@ngrx/store";
import * as fromRoot from '../reducers';
import {Observable} from "rxjs";
@Injectable()
export class KnowledgeapiService {
server = 'http://lookup.dbpedia.org';
searchURL = this.server + '/api/search/KeywordSearch?';
homepage = 'https://susper.com';
logo = '../images/susper.svg';
constructor(
private http: HttpClient,
private jsonp: Jsonp,
private store: Store<fromRoot.State>
) {}
public getsearchresults(searchquery){
let params = new URLSearchParams();
params.set('QueryString', searchquery);
let headers = new Headers({ 'Accept': 'application/json' });
let options:any = new RequestOptions({ headers: headers, search: params });
return this.http
.get(this.searchURL, options).map(res =>
res.json()
).catch(this.handleError);
}
private handleError (error: any) {
// In some advance version we can include a remote logging of errors
let errMsg = (error.message) ? error.message :
error.status ? `${error.status} - ${error.statusText}` : 'Server error';
console.error(errMsg); // Right now we are logging to console itself
return Observable.throw(errMsg);
}
}
但是现在当我从 Http
依赖项迁移到 HttpClient
时,在函数 getsearchresults(searchquery)
中每当我使用 map
函数将数据映射到 json 时,它给出 map
函数在类型 Observable<ArrayBuffer>
上不存在的错误。进一步删除 map
函数会为 catch
函数提供相同的消息。我遵循了这个 link https://github.com/angular/angular/issues/15548 但其中提供的解决方案不适用于 me.Where 我错了吗?我是否应该同时删除 map
和 catch
函数 getsearchresults(searchquery)
.
基本上您遇到了 types
的问题。上面的打字稿代码不一致。例如,没有为 getsearchresults()
函数定义类型。 this.http.get<NoTypeDefinedHere>
中没有定义类型
进一步 httpClient
给出 json 响应 default.And let headers = new Headers({ 'Accept': 'application/json' });
这里可能不需要。
检查您是否在导入中使用 http
模块或 httpClient
模块。
检查您是否已正确导入rxjs/add/operator/map
我试图从 Angular v4 更新到 Angular v6。
我正在将 Http
和 HttpModule
替换为 HttpClient
和 HttpClientModule
。
所以我在服务中从 @angular/common/http
导入了 HttpClient
并试图从 DBpedia 的 API.Earlier 中获取结果 我使用的是 @angular/http
的 Http
并且我的以下代码正在运行很好
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import {Jsonp, Headers, RequestOptions, URLSearchParams} from "@angular/http";
import {Store} from "@ngrx/store";
import * as fromRoot from '../reducers';
import {Observable} from "rxjs";
@Injectable()
export class KnowledgeapiService {
server = 'http://lookup.dbpedia.org';
searchURL = this.server + '/api/search/KeywordSearch?';
homepage = 'https://susper.com';
logo = '../images/susper.svg';
constructor(
private http: HttpClient,
private jsonp: Jsonp,
private store: Store<fromRoot.State>
) {}
public getsearchresults(searchquery){
let params = new URLSearchParams();
params.set('QueryString', searchquery);
let headers = new Headers({ 'Accept': 'application/json' });
let options:any = new RequestOptions({ headers: headers, search: params });
return this.http
.get(this.searchURL, options).map(res =>
res.json()
).catch(this.handleError);
}
private handleError (error: any) {
// In some advance version we can include a remote logging of errors
let errMsg = (error.message) ? error.message :
error.status ? `${error.status} - ${error.statusText}` : 'Server error';
console.error(errMsg); // Right now we are logging to console itself
return Observable.throw(errMsg);
}
}
但是现在当我从 Http
依赖项迁移到 HttpClient
时,在函数 getsearchresults(searchquery)
中每当我使用 map
函数将数据映射到 json 时,它给出 map
函数在类型 Observable<ArrayBuffer>
上不存在的错误。进一步删除 map
函数会为 catch
函数提供相同的消息。我遵循了这个 link https://github.com/angular/angular/issues/15548 但其中提供的解决方案不适用于 me.Where 我错了吗?我是否应该同时删除 map
和 catch
函数 getsearchresults(searchquery)
.
基本上您遇到了 types
的问题。上面的打字稿代码不一致。例如,没有为 getsearchresults()
函数定义类型。 this.http.get<NoTypeDefinedHere>
进一步 httpClient
给出 json 响应 default.And let headers = new Headers({ 'Accept': 'application/json' });
这里可能不需要。
检查您是否在导入中使用 http
模块或 httpClient
模块。
检查您是否已正确导入rxjs/add/operator/map