Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Integração com Angular 2

Olá, criei um projeto Angular2 para consumir a API de produtos do node. Porém tive um problema de permissão de acesso. Não sei se o problema está na disponibilidade do Node ou na restrição do Angular.

Tentei obter da seguinte forma:

http.get('http://localhost:3000/produtos').subscribe(
        produtos => console.log(produtos),
        error => console.log(error)
      );

No console log obtive o seguinte erro:

XMLHttpRequest cannot load http://localhost:3000/produtos. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:4200' is therefore not allowed access.

Lembro de ter visto isso no curso de Cordova, para permitir consumir serviços externos, mas era uma configuração no próprio xml do Cordova.

4 respostas

Olá Yuri nclua isto em seu response:

app.use(function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "http://localhost:3000, http://192.168.0.83:3000");
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  next();
});

No curso de JQuery Parte 2 é explicado com detalhes do Same origin Policy e CORS.

solução!

Exatamente dessa forma acabou não funcionando, mas verificando os erros e realizando os ajustes informados, fiz funcionar com o seguinte código na configuração do meu express:

    app.use(function(req, res, next) {
        res.header("Access-Control-Allow-Origin", "http://localhost:4200");
        res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, X-XSRF-TOKEN, Content-Type, Accept");
        next();
    });

Mudei pra localhost:4200, que é onde minha aplicação está rodando. e adicionei X-XSRF-TOKEN no header.

Faz sentido isso?

Isso só foi um exemplo, mesmo porque eu não sei o seu IP e nem a Porta que você esta subindo o seu servidor, que bom que seu certo.

Por favor feche o tópico, um abraço!

Você solucionou a sua própria dúvida? A minha dica não te ajudou?