Angular 类型Observable上不存在属性映射<;ArrayBuffer>;
我试图从Angular v4升级到Angular v6。 我将Angular 类型Observable上不存在属性映射<;ArrayBuffer>;,angular,typescript,angular4-httpclient,angular6,Angular,Typescript,Angular4 Httpclient,Angular6,我试图从Angular v4升级到Angular v6。 我将Http和HttpModule替换为HttpClient和HttpClientModule。 因此,我在一个服务中导入了HttpClient,它来自@angular/common/http,并试图从DBpedia的API中获得结果 import { Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import {
Http
和HttpModule
替换为HttpClient
和HttpClientModule
。
因此,我在一个服务中导入了HttpClient
,它来自@angular/common/http
,并试图从DBpedia的API中获得结果
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);
}
}
从'@angular/core'导入{Injectable};
从'@angular/common/http'导入{HttpClient};
从“@angular/http”导入{Jsonp,Headers,RequestOptions,URLSearchParams};
从“@ngrx/Store”导入{Store}”;
从“../reducers”以root格式导入*;
从“rxjs”导入{observeable};
@可注射()
导出类知识库服务{
服务器http://lookup.dbpedia.org';
searchURL=this.server+'/api/search/KeywordSearch?';
主页https://susper.com';
logo='../images/susper.svg';
建造师(
私有http:HttpClient,
私有jsonp:jsonp,
私人商店
) {}
公共getsearchresults(searchquery){
设params=newurlsearchparams();
参数集('QueryString',searchquery);
let headers=新的头({'Accept':'application/json'});
let options:any=newrequestoptions({headers:headers,search:params});
返回此文件。http
.get(this.searchURL,options).map(res=>
res.json()
).接住(这个.把手错误);
}
私有句柄错误(错误:任意){
//在某些高级版本中,我们可以包含错误的远程日志记录
让errMsg=(error.message)?error.message:
error.status?`${error.status}-${error.statusText}`:'服务器错误';
console.error(errMsg);//现在我们正在登录到控制台本身
返回可观察抛出(errMsg);
}
}
但是现在,当我从
Http
依赖迁移到HttpClient
时,每当我使用map
函数将数据映射到json时,在函数getsearchresults(searchquery)
中,它给出了一个错误,即map
函数在类型Observable上不存在,但其中提供的解决方案对我不起作用。我错在哪里?我是否应该删除getsearchresults(searchquery)
中的map
和catch
函数基本上你面临着类型的问题。上述类型脚本代码不一致。例如,没有为getsearchresults()
函数定义类型。this.http.get中未定义类型
此外,httpClient
默认提供json响应,并且let headers=new headers({'Accept':'application/json'})这里可能不需要代码>
检查您是否正在导入中使用http
模块或httpClient
模块
检查您是否正确导入了rxjs/add/operator/map
,谢谢您的回答,正如我之前所说,我使用的是Http
模块,但现在我已切换到HttpClient
模块。我还导入了rxjs/add/operator/map
。早些时候,上面的代码一切正常。另外,我认为标题
不会在这里造成任何问题。我现在删除了map
函数,但现在它为catch
函数提供了相同的错误消息。您能提出任何解决方案吗?您能更新您的问题以共享导入语句吗?我已编辑代码以包含导入。请看一看。根本原因是你的标题。从@angular/common/http而不是@angular/http导入HttpHeaders。响应类型将是json而不是arrayBuffer。请参阅。为了进一步理解,请提供查询字符串,看看是否适合您,请详细说明!!在此之前,我可以肯定的是,如果您通过了正确的查询,我只需确认所提供的stackblitz是否有效。是的,它正在生成链接,但由于DBpedia的响应是HTTP,因此混合内容,结果不会显示在控制台上。您能为我提供stackblitz和您的编辑吗