问题描述
我正在尝试从Angular8上的service.ts将Http更新为HttpClient。
我更改了HttpClient和HttpHeaders的Http和Headers,并删除了'.pipe(map((response)=> response.json()。response));'。选项search:params.toString()在HttpParams上不起作用,并且按照建议,我仅更改为params。
但是请求无法正常运行:(
在(Http)之前
import { Injectable,OnDestroy } from '@angular/core';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
import { Http,Headers,Jsonp } from '@angular/http';
import { Environment } from '../app.component';
//my components imports
@Injectable()
export class CompanyService implements OnDestroy {
private url = Environment.origin;
private urlMainSearch = Environment.MAIN_SEARCH;
private urlSearchAll = Environment.SEARCH_ALL;
private headers = new Headers({
'Accept': 'application/cp+json','Content-Type': 'application/json'
});
private headersFile = new Headers({
'Accept': 'application/cp+json','Content-Type': 'multipart/form-data; boundary=something'
});
constructor(private http: Http,private jsonp: Jsonp) { }
ngOnDestroy() {
delete this.http;
}
buscarEmpresas(pesquisa: string): Observable<any> {
return this.http.get(`${this.url}/companies/${pesquisa}/search`,{ headers: this.headers })
.pipe(map((response) => response.json().response));
}
buscarEmpresasCache(pesquisa: string): Observable<any> {
return this.http.get(`${this.url}/companies/search?texto=${StringUtils.unaccent(pesquisa)}`,{ headers: this.headers })
.pipe(map((response) => response.json().response));
}
buscarEmpresasMicroServico(pesquisa: string): Observable<any> {
return this.http.get(`${this.urlMainSearch}/main-search?texto=${StringUtils.unaccent(pesquisa)}`,{ headers: this.headers })
.pipe(map((response) => response.json().response));
}
getEmpresa(id: number): Observable<Retorno<Empresa>> {
return this.http.get(`${this.url}/companies/${id}`,{ headers: this.headers })
.pipe(map((response) => new Retorno<Empresa>(response.json())));
}
getEmpresaByUrlLink(urlLink: string): Observable<Retorno<Empresa>> {
return this.http.get(`${this.url}/companies/link/${urlLink}`,{ headers: this.headers })
.pipe(map((response) => new Retorno<Empresa>(response.json())));
}
getEmpresaratings(id: number): Observable<Retorno<rating>> {
return this.http.get(`${this.url}/companies/${id}/ratings`,{ headers: this.headers })
.pipe(map((response) => new Retorno<rating>(response.json())));
}
getoperadora(): Observable<Array<Empresa>> {
return this.http.get(`${this.url}/companies/search/operadora/10/1`,{ headers: this.headers })
.pipe(map((response) => response.json().map(empresa => new Empresa(empresa))));
}
getTopEmpresas(type: number): Observable<Retorno<Array<Empresa>>> {
return this.http.get(`${this.url}/companies/top?type=${type}`,{ headers: this.headers })
.pipe(map((response) => new Retorno<Array<Empresa>>(response.json())));
}
buscarEmpresasPorTipo(tipo: number,pagina: number,tags: Array<number>,continentes: Array<number>,paises: Array<number>,cidades: Array<number>): Observable<Retorno<Array<Empresarating>>> {
// if(!this.resolveUrlSearchBug()) {
let url = `${this.url}/companies/searchtype?number=25&page=${pagina}&type=${tipo}`;
if (tags && tags.length > 0) {
const tag = `&tags=${tags.join(',')}`;
url = url + tag;
}
if (continentes && continentes.length > 0) {
const continente = `&continentes=${continentes.join(',')}`;
url = url + continente;
}
if (paises && paises.length > 0) {
const pais = `&paises=${paises.join(',')}`;
url = url + pais;
}
if (cidades && cidades.length > 0) {
const cidade = `&cidades=${cidades.join(',')}`;
url = url + cidade;
}
return this.http.get(url,{ headers: this.headers })
.pipe(map((response) => new Retorno<Array<Empresarating>>(response.json())));
// }
}
buscarTodasEmpresas(pagina: number,texto: string,tipos: Array<number>,localizacoes: Array<number>):
Observable<Retorno<RankingTodasEmpresas>> {
let url = `${this.urlSearchAll}/company-search-all?texto=${texto}&limit=25&offset=${pagina}`;
if (tags && tags.length > 0) {
const tag = `&tags=${tags.join(',')}`;
url = url + tag;
}
if (localizacoes && localizacoes.length > 0) {
const localizacao = `&localizacoes=${localizacoes.join(',')}`;
url = url + localizacao;
}
if (tipos && tipos.length > 0) {
const tipo = `&tipos=${tipos.join(',')}`;
url = url + tipo;
}
return this.http.get(url,{ headers: this.headers })
.pipe(map((response) => new Retorno<RankingTodasEmpresas>(response.json())));
}
buscarEmpresasSimilares(tipo: number,idEmpresaPesquisada: number): Observable<Retorno<Array<Empresa>>> {
return this.http.get(`${this.url}/companies/random-searchtype?type=${tipo}&idEmpresaPesquisada=${idEmpresaPesquisada}`,{ headers: this.headers })
.pipe(map((response) => new Retorno<Array<Empresa>>(response.json())));
}
buscarMenuTags(tipo: number): Observable<Retorno<SuperMenu>> {
// console.log(this.resolveUrlSearchBug());
// if(!this.resolveUrlSearchBug()) {
// console.log('Chamando service.........');
return this.http.get(`${this.url}/companies/searchtype/filtro?type=${tipo}`,{ headers: this.headers })
.pipe(map((response) => new Retorno<SuperMenu>(response.json())));
// }
}
cadastrarEmpresa(empresa: Empresa,isByCadFornecedor: boolean = false): Observable<Retorno<Empresa>> {
return this.http.post(`${this.url}/companies?isByCadFornecedor=${isByCadFornecedor}`,JSON.stringify(empresa),{ headers: this.headers })
.pipe(map((response) => new Retorno<Empresa>(response.json())));
}
cadastrarEmpresaPreCadastro(preCadastro: EmpresaPreCadastro): Observable<Retorno<Empresa>> {
return this.http.post(`${this.url}/companies/pre-cadastro`,JSON.stringify(preCadastro),{ headers: this.headers })
.pipe(map((response) => new Retorno<Empresa>(response.json())));
}
adminCadastrarEmpresa(empresa: Empresa): Observable<Retorno<Empresa>> {
return this.http.post(`${this.url}/companies/admin`,{ headers: this.headers })
.pipe(map((response) => new Retorno<Empresa>(response.json())));
}
alterarEmpresa(empresa: Empresa): Observable<Retorno<Empresa>> {
return this.http.put(`${this.url}/companies`,{ headers: this.headers })
.pipe(map((response) => new Retorno<Empresa>(response.json())));
}
buscarTiposEmpresa(): Observable<Retorno<Array<Tipo>>> {
return this.http.get(`${this.url}/categories`,{ headers: this.headers })
.pipe(map((response) => new Retorno<Array<Tipo>>(response.json())));
}
buscarTipoEmpresa(tipo: number): Observable<Retorno<Tipo>> {
return this.http.get(`${this.url}/company-types/${tipo}`,{ headers: this.headers })
.pipe(map((response) => new Retorno<Tipo>(response.json())));
}
buscarTipoEmpresaPorUrlLink(urlLink: string): Observable<Retorno<Tipo>> {
if (this.http) {
return this.http.get(`${this.url}/company-types/link/${urlLink}`,{ headers: this.headers })
.pipe(map((response) => new Retorno<Tipo>(response.json())));
}
}
atualizarStatus(codigo: number): Observable<any> {
return this.http.put(`${this.url}/company-status`,JSON.stringify(codigo),{ headers: this.headers })
.pipe(map((response) => response.json()));
}
apagarCategoria(id: number): Observable<any> {
return this.http.delete(`${this.url}/company-types/${id}`,{ headers: this.headers })
.pipe(map((response) => response.json()));
}
atualizarCategoria(categoria: Tipo): Observable<any> {
return this.http.put(`${this.url}/company-types`,JSON.stringify(categoria),{ headers: this.headers })
.pipe(map((response) => response.json()));
}
salvarCategoria(categoria: Tipo): Observable<any> {
return this.http.put(`${this.url}/company-types`,{ headers: this.headers })
.pipe(map((response) => response.json()));
}
vincularEmpresaUser(empresa: EmpresaUsuario): Observable<Retorno<EmpresaUsuario>> {
return this.http.post(`${this.url}/company-users/associar`,{ headers: this.headers })
.pipe(map((response) => new Retorno<EmpresaUsuario>(response.json())));
}
adminBuscarTodos(page: number,size: number,sort: string,approved: boolean,pending: boolean,blocked: boolean,denied: boolean,deleted: boolean,nome: string,tipo: number): Observable<Retorno<Array<Empresa>>> {
const params: URLSearchParams = new URLSearchParams();
params.set('page',page.toString());
params.set('size',size.toString());
params.set('sort',sort);
if (approved) {
params.set('approved','true');
}
if (pending) {
params.set('pending',pending.toString());
}
if (blocked) {
params.set('blocked',blocked.toString());
}
if (denied) {
params.set('denied',denied.toString());
}
if (deleted) {
params.set('deleted',deleted.toString());
}
if (nome) {
params.set('nome',nome);
}
if (tipo) {
params.set('typeId',tipo.toString());
}
return this.http.get(`${this.url}/companies`,{ headers: this.headers,search: params.toString() })
.pipe(map((response) => new Retorno<Array<Empresa>>(response.json())));
}
deletarEmpresa(id: number): Observable<Retorno<any>> {
return this.http.delete(`${this.url}/companies/${id}`,{ headers: this.headers })
.pipe(map((response) => new Retorno<any>(response.json())));
}
uploadXLSX(file: File) {
const formData: FormData = new FormData();
formData.append('file',file,file.name);
return this.http.post(`${this.url}/companies/xls/`,formData,{ headers: this.headersFile })
.pipe(map((response) => response.json()));
}
buscarEmpresaCNPJ8(cnpj: string): Observable<Retorno<EmpresaUsuario>> {
return this.http.get(`${this.url}/companies/cnpj8/${cnpj}`,{ headers: this.headers })
.pipe(map((response) => new Retorno<EmpresaUsuario>(response.json())));
}
adminBuscarEmpresasPorTipo(page: number,id: number,nome: string): Observable<Retorno<Empresa>> {
let t = null;
try {
t = tipos.join(',');
} catch {
t = tipos;
}
let url = `${this.url}/companies/buscar-tipo?page=${page}&size=${size}&sort=${sort}&tipos=${t}`;
if (nome) {
url = url + `&nome=${nome}`;
}
if (id) {
url = url + `&id=${id}`;
}
return this.http.get(url,{ headers: this.headers })
.pipe(map((response) => new Retorno<Empresa>(response.json())));
}
public buscarResumoFornecedor(referencia: string): Observable<Retorno<ResumoFornecedor>> {
return this.http.get(`${this.url}/company-dashboard/resumo/fornecedor/referencia/${referencia}`,{ headers: this.headers })
.pipe(map((response) => new Retorno<ResumoFornecedor>(response.json())));
}
public buscarResumoAgencia(): Observable<Retorno<ResumoAgencia>> {
return this.http.get(`${this.url}/company-dashboard/resumo/agencia`,{ headers: this.headers })
.pipe(map((response) => new Retorno<ResumoAgencia>(response.json())));
}
public buscarBarraCamposPreenchidos(): Observable<Retorno<number>> {
return this.http.get(`${this.url}/company-dashboard/barra-campos`,{ headers: this.headers })
.pipe(map((response) => new Retorno<number>(response.json())));
}
public salvarLocalizacoes(id: number,locais: Array<ApiLoacalizacaoCidadecp>):
Observable<Retorno<Array<ApiLoacalizacaoCidadecp>>> {
return this.http.post(`${this.url}/company-localizacao/salvar/${id}`,JSON.stringify(locais),{ headers: this.headers })
.pipe(map((response) => new Retorno<Array<ApiLoacalizacaoCidadecp>>(response.json())));
}
public removerLocalizacao(id: number,local: ApiLoacalizacaoCidadecp):
Observable<Retorno<Array<ApiLoacalizacaoCidadecp>>> {
return this.http.post(`${this.url}/company-localizacao/remover/${id}`,JSON.stringify(local),{ headers: this.headers })
.pipe(map((response) => new Retorno<Array<ApiLoacalizacaoCidadecp>>(response.json())));
}
public adminBuscarLocalizacoes(page: number,sort: string): Observable<Retorno<Array<ApiLoacalizacaoCidadecp>>> {
const params: URLSearchParams = new URLSearchParams();
params.set('page',sort);
return this.http.get(`${this.url}/company-localizacao/admin-filtrar`,search: params.toString() })
.pipe(map((response) => new Retorno<Array<ApiLoacalizacaoCidadecp>>(response.json())));
}
public buscarLocalizacoes(texto: string): Observable<any> {
const params: URLSearchParams = new URLSearchParams();
params.set('texto',texto.toString());
return this.http.get(`${this.url}/company-localizacao`,search: params.toString() })
.pipe(map((response) => response.json().response));
}
private resolveUrlSearchBug(): boolean {
const url = window.location.pathname.split("/");
if (url[1] !== 'empresas') {
return true;
}
}
}
在(HttpClient)之后
import { Injectable,OnDestroy } from '@angular/core';
import { Observable } from 'rxjs';
import { HttpClient,HttpHeaders,HttpParams } from '@angular/common/http';
import { Environment } from '../app.component';
//my components imports
@Injectable()
export class CompanyService implements OnDestroy {
private url = Environment.origin;
private urlMainSearch = Environment.MAIN_SEARCH;
private urlSearchAll = Environment.SEARCH_ALL;
private headers = new HttpHeaders({
'Accept': 'application/cp+json','Content-Type': 'application/json'
});
private headersFile = new HttpHeaders({
'Accept': 'application/cp+json','Content-Type': 'multipart/form-data; boundary=something'
});
constructor(private http: HttpClient) { }
ngOnDestroy() {
delete this.http;
}
buscarEmpresas(pesquisa: string): Observable<any> {
return this.http.get<any>(`${this.url}/companies/${pesquisa}/search`,{ headers: this.headers })
}
buscarEmpresasCache(pesquisa: string): Observable<any> {
return this.http.get<any>(`${this.url}/companies/search?texto=${StringUtils.unaccent(pesquisa)}`,{ headers: this.headers })
}
buscarEmpresasMicroServico(pesquisa: string): Observable<any> {
return this.http.get<any>(`${this.urlMainSearch}/main-search?texto=${StringUtils.unaccent(pesquisa)}`,{ headers: this.headers })
}
getEmpresa(id: number): Observable<Retorno<Empresa>> {
return this.http.get<Retorno<Empresa>>(`${this.url}/companies/${id}`,{ headers: this.headers })
}
getEmpresaByUrlLink(urlLink: string): Observable<Retorno<Empresa>> {
return this.http.get<Retorno<Empresa>>(`${this.url}/companies/link/${urlLink}`,{ headers: this.headers })
}
getEmpresaratings(id: number): Observable<Retorno<rating>> {
return this.http.get<Retorno<rating>>(`${this.url}/companies/${id}/ratings`,{ headers: this.headers })
}
getoperadora(): Observable<Array<Empresa>> {
return this.http.get<Array<Empresa>>(`${this.url}/companies/search/operadora/10/1`,{ headers: this.headers })
}
getTopEmpresas(type: number): Observable<Retorno<Array<Empresa>>> {
return this.http.get<Retorno<Array<Empresa>>>(`${this.url}/companies/top?type=${type}`,{ headers: this.headers })
}
buscarEmpresasPorTipo(tipo: number,')}`;
url = url + cidade;
}
return this.http.get<Retorno<Array<Empresarating>>>(url,{ headers: this.headers })
// }
}
buscarTodasEmpresas(pagina: number,')}`;
url = url + tipo;
}
return this.http.get<Retorno<RankingTodasEmpresas>>(url,{ headers: this.headers })
}
buscarEmpresasSimilares(tipo: number,idEmpresaPesquisada: number): Observable<Retorno<Array<Empresa>>> {
return this.http.get<Retorno<Array<Empresa>>>(`${this.url}/companies/random-searchtype?type=${tipo}&idEmpresaPesquisada=${idEmpresaPesquisada}`,{ headers: this.headers })
}
buscarMenuTags(tipo: number): Observable<Retorno<SuperMenu>> {
// console.log(this.resolveUrlSearchBug());
// if(!this.resolveUrlSearchBug()) {
// console.log('Chamando service.........');
return this.http.get<Retorno<SuperMenu>>(`${this.url}/companies/searchtype/filtro?type=${tipo}`,{ headers: this.headers })
// }
}
cadastrarEmpresa(empresa: Empresa,isByCadFornecedor: boolean = false): Observable<Retorno<Empresa>> {
return this.http.post<Retorno<Empresa>>(`${this.url}/companies?isByCadFornecedor=${isByCadFornecedor}`,{ headers: this.headers })
}
cadastrarEmpresaPreCadastro(preCadastro: EmpresaPreCadastro): Observable<Retorno<Empresa>> {
return this.http.post<Retorno<Empresa>>(`${this.url}/companies/pre-cadastro`,{ headers: this.headers })
}
adminCadastrarEmpresa(empresa: Empresa): Observable<Retorno<Empresa>> {
return this.http.post<Retorno<Empresa>>(`${this.url}/companies/admin`,{ headers: this.headers })
}
alterarEmpresa(empresa: Empresa): Observable<Retorno<Empresa>> {
return this.http.put<Retorno<Empresa>>(`${this.url}/companies`,{ headers: this.headers })
}
buscarTiposEmpresa(): Observable<Retorno<Array<Tipo>>> {
return this.http.get<Retorno<Array<Tipo>>>(`${this.url}/categories`,{ headers: this.headers })
}
buscarTipoEmpresa(tipo: number): Observable<Retorno<Tipo>> {
return this.http.get<Retorno<Tipo>>(`${this.url}/company-types/${tipo}`,{ headers: this.headers })
}
buscarTipoEmpresaPorUrlLink(urlLink: string): Observable<Retorno<Tipo>> {
if (this.http) {
return this.http.get<Retorno<Tipo>>(`${this.url}/company-types/link/${urlLink}`,{ headers: this.headers })
}
}
atualizarStatus(codigo: number): Observable<any> {
return this.http.put<any>(`${this.url}/company-status`,{ headers: this.headers })
}
apagarCategoria(id: number): Observable<any> {
return this.http.delete<any>(`${this.url}/company-types/${id}`,{ headers: this.headers })
}
atualizarCategoria(categoria: Tipo): Observable<any> {
return this.http.put<any>(`${this.url}/company-types`,{ headers: this.headers })
}
salvarCategoria(categoria: Tipo): Observable<any> {
return this.http.put<any>(`${this.url}/company-types`,{ headers: this.headers })
}
vincularEmpresaUser(empresa: EmpresaUsuario): Observable<Retorno<EmpresaUsuario>> {
return this.http.post<Retorno<EmpresaUsuario>>(`${this.url}/company-users/associar`,{ headers: this.headers })
}
adminBuscarTodos(page: number,tipo: number): Observable<Retorno<Array<Empresa>>> {
const params: HttpParams = new HttpParams();
params.set('page',tipo.toString());
}
return this.http.get<Retorno<Array<Empresa>>>(`${this.url}/companies`,params })
}
deletarEmpresa(id: number): Observable<Retorno<any>> {
return this.http.delete<any>(`${this.url}/companies/${id}`,{ headers: this.headers })
}
uploadXLSX(file: File) {
const formData: FormData = new FormData();
formData.append('file',{ headers: this.headersFile })
}
buscarEmpresaCNPJ8(cnpj: string): Observable<Retorno<EmpresaUsuario>> {
return this.http.get<Retorno<EmpresaUsuario>>(`${this.url}/companies/cnpj8/${cnpj}`,{ headers: this.headers })
}
adminBuscarEmpresasPorTipo(page: number,');
} catch {
t = tipos;
}
let url = `${this.url}/companies/buscar-tipo?page=${page}&size=${size}&sort=${sort}&tipos=${t}`;
if (nome) {
url = url + `&nome=${nome}`;
}
if (id) {
url = url + `&id=${id}`;
}
return this.http.get<Retorno<Empresa>>(url,{ headers: this.headers })
}
public buscarResumoFornecedor(referencia: string): Observable<Retorno<ResumoFornecedor>> {
return this.http.get<Retorno<ResumoFornecedor>>(`${this.url}/company-dashboard/resumo/fornecedor/referencia/${referencia}`,{ headers: this.headers })
}
public buscarResumoAgencia(): Observable<Retorno<ResumoAgencia>> {
return this.http.get<Retorno<ResumoAgencia>>(`${this.url}/company-dashboard/resumo/agencia`,{ headers: this.headers })
}
public buscarBarraCamposPreenchidos(): Observable<Retorno<number>> {
return this.http.get<Retorno<number>>(`${this.url}/company-dashboard/barra-campos`,{ headers: this.headers })
}
public salvarLocalizacoes(id: number,locais: Array<ApiLoacalizacaoCidadecp>):
Observable<Retorno<Array<ApiLoacalizacaoCidadecp>>> {
return this.http.post<Retorno<Array<ApiLoacalizacaoCidadecp>>>(`${this.url}/company-localizacao/salvar/${id}`,{ headers: this.headers })
}
public removerLocalizacao(id: number,local: ApiLoacalizacaoCidadecp):
Observable<Retorno<Array<ApiLoacalizacaoCidadecp>>> {
return this.http.post<Retorno<Array<ApiLoacalizacaoCidadecp>>>(`${this.url}/company-localizacao/remover/${id}`,{ headers: this.headers })
}
public adminBuscarLocalizacoes(page: number,sort: string): Observable<Retorno<Array<ApiLoacalizacaoCidadecp>>> {
const params: HttpParams = new HttpParams();
params.set('page',sort);
return this.http.get<Retorno<Array<ApiLoacalizacaoCidadecp>>>(`${this.url}/company-localizacao/admin-filtrar`,params })
}
public buscarLocalizacoes(texto: string): Observable<any> {
const params: HttpParams = new HttpParams();
params.set('texto',texto.toString());
return this.http.get<any>(`${this.url}/company-localizacao`,params })
}
private resolveUrlSearchBug(): boolean {
const url = window.location.pathname.split("/");
if (url[1] !== 'empresas') {
return true;
}
}
}
解决方法
我假设变量this.http
的类型为HttpClient
。 HttpClient.get()
的类型定义指出,options
自变量具有一个可选属性params
,其类型为:
params?: HttpParams | { [param: string]: string | string[]; };
它不能是单个string
(这是params.toString()
返回的内容)。它是strings
的键值对象或HttpParams
对象。
您可以直接传递params
变量,因为它的类型为HttpParams
。
代替
{ headers: this.headers,params: params.toString() }
就做
{ headers: this.headers,params }
但是params
并非总是两种情况都为空吗?您可以初始化一个空对象,并且不添加任何内容(除非您省略了该部分)。
编辑:
看到完整的代码后,我可以解释参数为空的情况。
在URLSearchParams
类上,set()
方法是void
方法,该方法使对象变异且不返回任何内容。在原始代码中,他们正在执行的操作是创建一个空对象,在其上设置一堆值,然后将其转换为字符串。 (我问这个问题是空的,因为带有params.set()
的部分不是您的示例代码的一部分。)
(method) URLSearchParams.set(name: string,value: string): void
Sets the value associated to a given search parameter to the given value. If there were several values,delete the others.
HttpParams
类的工作方式不同。它不会返回您设置的值,而是返回一个新实例。
(method) HttpParams.set(param: string,value: string): HttpParams
Replaces the value for a parameter.
@param param — The parameter name.
@param value — The new value.
@return — A new body with the new value.
但是,由于原始代码是使用void
方法构建的,因此您对返回的值不做任何事情。每次设置内容时,都需要将params
的值更改为返回值。将每个const params
更改为let params
,以便我们覆盖它。然后将所有对params.set()
的呼叫替换为params = params.set()
。像这样:
let params: HttpParams = new HttpParams();
params = params.set('page',page.toString());
params = params.set('size',size.toString());
params = params.set('sort',sort);