BrasilAPI / cep-promise

Busca por CEP integrado diretamente aos serviços dos Correios, ViaCEP e outros (Node.js e Browser)
MIT License
2.88k stars 316 forks source link

Erro ao buscar no CEP Aberto #98

Closed kavalcante closed 6 years ago

kavalcante commented 6 years ago

Ao fazer a busca, ela retorna com sucesso, porém no console é reportado erro por parte do CEP Aberto de CORS. Além de dar 404.

screenshot from 2017-11-25 19-01-15

É no client-side, não cheguei a testar no server-side.

lucianopf commented 6 years ago

Opa @kavalcante, to tentando inspecionar o seu erro aqui mas não estou conseguido, tem como me fornecer algumas informações adicionais pra eu tentar replicar e consertar?

1 - Como foi o processo de instalação? 2 - Tem certeza que está usando o cep-promise-browser.js como source? 3 - Vc atualizou a dependencia ou isso foi ao adicionar ela no seu projeto?

kavalcante commented 6 years ago

Opa Luciano, eu utilizo Vue.js. O que fiz foi simplesmente fazer o import:

import cep from 'cep-promise';

E depois chamei a função via um method, dessa maneira:

methods: {
  searchCep(zipcode) {
    return cep(zipcode);
  },
},

E nesse projeto em especifico foi só adicionar no projeto. Inclusive por isso abri a Issue, pois isso não está acontecendo com as implementações do Correios e Via CEP (tanto é que ele retorna com sucesso).

Eu tentei criar um Fiddle, mas não consegui :(

lucianopf commented 6 years ago

Foi utilizando o npm então mesmo, né?

Entendi.. existe a chance do seu import não estar pergando a versão dentro da dist/cep-promise-browser.js?

Tem como vc testar importando manualmente o caminho pro arquivo específico para versões do browser?

kavalcante commented 6 years ago

Sim, foi através do NPM.

Testei aqui e é isso mesmo que está acontecendo. Quando fiz o apontamento para:

import cep from 'cep-promise/dist/cep-promise-browser.min';

O erro parou. E quando voltei para o normal, o erro continua.

lucianopf commented 6 years ago

O bundle que vc ta usando não é o correto de se utilizar na no front, dado ao seu tooling e a forma como vc gera o seu JS no front vc está pegando a lib de Node e injetando dentro do seu bundle.

É uma peculiaridade da biblioteca que nós precisamos documentar. =(

Vc ta usando o que para transpilar o código e gerar o seu bundle?

Vou dar uma investigada um pouco mais funda pra ver se tem algo que eu consiga fazer pra detectar quando a lib é importada pra ser adicionada num bundle.

(Se não me engano no lado do webpack tem como vc criar um alias pra uma dependência apontando um arquivo, acho que isso já te ajudaria 🤔 )

MarcoWorms commented 6 years ago

@lucianopf creio que vc não consiga fazer isso dinamicamente, na pagarme-js a gente também teve que fazer bundles separados pra borwser e node :P

lucianopf commented 6 years ago

Puts.. =(

Então é alterar a documentação mesmo 😢

kavalcante commented 6 years ago

Eu utilizo Webpack mesmo. Então, o que me estranha, é que nas versões anteriores (quando era ViaCEP e Correios), isso já era feito automaticamente. Uma das nossas aplicações inclusive está com essa versão anterior implementada.

Outra coisa que aconteceu, mas essa ainda não é certeza, é que deu alguns erros importando dessa maneira (parcial). Eu não cheguei a ver direito, mas era algo como "O correios não aceita requisições via browser". Vou checar isso melhor, e vejo se é de fato um bug. Qualquer coisa abro outra issue.

lucianopf commented 6 years ago

Caraca mano, vc ta certo, de alguma forma a versão 2.0.5 pra baixo não reclamava disso, o que é bizarro! 🤔

Vou continuar brincando aqui pra ver se consigo replicar esse comportamento bizarro dnv! rsrs Inserir o novo service alterou um cadinho como os outros services funcionam, inclusive achei um errinho que ligou novamente um dos services e pode ser isso que tava fazendo não acusar o erro de CORS.

(https://github.com/filipedeschamps/cep-promise/pull/95)

Quanto ao seu segundo ponto eu não consegui replicar de forma alguma =(

screen shot 2017-11-29 at 9 58 00 am screen shot 2017-11-29 at 9 58 12 am

lucianopf commented 6 years ago

Rapaz.. eu odeio admitir a derrota mas me parece ser o único jeito..

O motivo pelo qual estava funcionando é realmente pq antes não estava funcionando... hehehe

Vc tem duas formas de consertar isso no lado do cliente:

1 - Webpack alias para /node_modules/cep-promise/dist/cep-promise-browser.min.js 2 - Baixar usando bower, mas eu nem sei se está com a versão mais atualizada. @filipedeschamps

Vou adicionar esses passos no README pra ajudar a galera que tiver o mesmo problema que vc.

kavalcante commented 6 years ago

Beleza @lucianopf, obrigado pela ajuda!

lucianopf commented 6 years ago

@kavalcante tem como confirmar se a issue foi resolvida fazendo favor irmão?

MarcoWorms commented 6 years ago

@kavalcante ta resolvido? podemos fechar essa issue? :)

danielsalles commented 6 years ago

Tive o mesmo erro aqui.

Edit: Porque não utilizam axios, acho que esse problema estaria solucionado se tivesse utilizando.

MarceloPrado commented 6 years ago

Estava com o mesmo erro. Importando diretamente a distribuição de browser corrigiu.

import cepPromise from 'cep-promise/dist/cep-promise-browser.min';

kavalcante commented 6 years ago

Desculpe a demora em retornar com isso. Tentei a implementação parcial, porém meu problema é que a aplicação que eu trabalho é SSR. Quando o Nuxt tenta fazer o import, o window que é requerido na versão do browser não existe. E se eu importo a versão normal, dá aquele erro de CORS.

Talvez a minha única solução seja, ou deixar do jeito que está, apenas buscando na ViaCep, ou criando um endpoint rest via back-end para lidar com as requisições, o que eu particularmente acho extremamente ruim, pois vou ter que fazer um request, que faz outros dois request's.

Outro problema que vi o browser notificar é que o CepAberto não possui HTTPS. Não sei se isso é um ponto negativo e se implica em alguma coisa.

kavalcante commented 6 years ago

Acredito que esse problema seja na implementação da própria CepAberto, não sei se isso pode ser um erro da lib, pelo menos não me parece ser o caso.

Além disso, eu utilizo axios para realizar a requisição.

lucianopf commented 6 years ago

O problema em si foi resolvido importando o arquivo com a build específica para web, vou continuar tentando simplificar isso, mas enquanto isso é a forma que temos =/