Como usar o CORS no Node.js e Express.js?

O CORS (Cross-Origin Resource Sharing) no Express.js permite que APIs sejam acessadas por aplicações hospedadas em domínios diferentes.

Como usar o CORS no Node.js e Express.js?

O CORS (Cross-Origin Resource Sharing) é um mecanismo que permite ou restringe requisições entre diferentes domínios. No Express.js, podemos configurar o CORS para permitir que aplicações frontend consumam APIs hospedadas em outro domínio.

1. Por que configurar o CORS?

Por padrão, navegadores bloqueiam requisições cross-origin por segurança. Isso significa que uma API hospedada em api.meusite.com não pode ser acessada diretamente por um frontend hospedado em app.meusite.com sem que o CORS esteja ativado.

2. Instalando o pacote cors

O Express.js possui um middleware chamado cors, que facilita a configuração. Para instalá-lo, execute:

npm install cors

3. Configurando o CORS no Express.js

Após a instalação, importamos e aplicamos o middleware cors() ao servidor:

const express = require('express');
const cors = require('cors');
const app = express();

app.use(cors());

app.get('/dados', (req, res) => {
    res.json({ mensagem: 'Requisição permitida via CORS' });
});

app.listen(3000, () => console.log('Servidor rodando na porta 3000'));

Agora, qualquer domínio pode acessar os endpoints da API.

4. Restringindo o acesso a domínios específicos

Para maior segurança, podemos permitir apenas requisições de domínios específicos:

app.use(cors({
    origin: 'https://meusite.com'
}));

Isso restringe o acesso apenas ao domínio https://meusite.com.

5. Permitindo múltiplos domínios

Caso seja necessário permitir múltiplos domínios:

const allowedOrigins = ['https://meusite.com', 'https://outrosite.com'];

app.use(cors({
    origin: (origin, callback) => {
        if (!origin || allowedOrigins.includes(origin)) {
            callback(null, true);
        } else {
            callback(new Error('Não permitido pelo CORS'));
        }
    }
}));

6. Configurando métodos permitidos

Podemos definir quais métodos HTTP são aceitos na API:

app.use(cors({
    origin: '*',
    methods: ['GET', 'POST', 'PUT', 'DELETE']
}));

Conclusão

O CORS no Express.js é essencial para permitir que aplicações frontend consumam APIs externas com segurança. Com o middleware cors(), podemos facilmente configurar permissões para diferentes domínios e métodos, garantindo que nossa API seja acessível apenas por clientes autorizados.

O conceito de CORS se tornou essencial com a popularização das aplicações SPA (Single Page Applications) e APIs RESTful. Antes dele, as requisições AJAX eram limitadas ao mesmo domínio, dificultando a comunicação entre servidores distintos.

Hoje, ferramentas como React, Angular e Vue.js dependem do CORS para consumir APIs backend hospedadas em domínios diferentes. Configurar corretamente as permissões evita erros como "Blocked by CORS policy" e melhora a segurança da aplicação.

Algumas aplicações:

  • Permitir comunicação entre frontend e backend hospedados em domínios diferentes
  • Integrar serviços externos como APIs de terceiros
  • Garantir segurança ao restringir acessos indesejados
  • Evitar erros de bloqueio de requisições no navegador
  • Configurar permissões específicas para métodos HTTP

Dicas para quem está começando

  • Use app.use(cors()) para permitir requisições de qualquer domínio.
  • Para maior segurança, defina domínios específicos em origin.
  • Se precisar de mais controle, utilize allowedOrigins e um callback para validar o acesso.
  • Teste requisições cross-origin com ferramentas como Postman ou Insomnia.
  • Evite configurar origin: '*' em produção sem avaliar riscos de segurança.

Contribuições de Lucas Fernandes

Compartilhe este tutorial: Como usar o CORS no Node.js e Express.js?

Compartilhe este tutorial

Continue aprendendo:

Como receber dados no corpo da requisição (body) no Express.js?

No Express.js, o middleware express.json() permite capturar e processar dados enviados no corpo da requisição em formato JSON.

Tutorial anterior

Como lidar com erros no Express.js?

O Express.js permite lidar com erros utilizando middlewares específicos, garantindo respostas padronizadas e melhor experiência para os usuários.

Próximo tutorial