Como configurar o CORS no Node.js

November 25, 2022

*No exemplo descrito estou utilizando o express como framework.

Para habilitar o CORS para um ou mais domínios ou ainda tornar sua API pública, primeiro precisamos instalar a dependência cors.

npm i cors

Após isso basta irmos em nosso arquivo de inicialização do servidor e fazer a devida configuração. Estou levando em consideração que você já tenha instalado o express e tenha sua API funcional.

No primeiro exemplo vamos deixar a API pública para quem quiser obter informações a partir dela.

const express = require('express')

const app = express()

app.use(cors())

Neste segundo exemplo vamos dar permissão a apenas um domínio.

const express = require('express')

const app = express()

app.use(cors({
	origin: 'http://somedomain.com'
}))

Nesse terceiro exemplo vamos dar permissão a mais de um domínio. Para isso vamos criar uma lista com esses domínios para depois verificar a partir dessa lista.

const express = require('express')

const app = express()

const allowedDomains = [
	'http://somedomain.com',
	'http://blog.somedomain.com',
	'http://loremipsum.com',
]

app.use(cors({
	origin: function(origin, callback) {
		const allowed = allowedDomains.includes(origin)

		callback(null, allowed)
	}
}))

Neste último exemplo, a propriedade origin do objeto que passamos para cors() tem uma função como valor. Essa função recebe dois parâmetros: o primeiro é a origem que vamos verificar e o segundo é uma funçãod e callback, que chamamos de callback mesmo. Nessa função criamos uma constante chamada allowed que terá como valor true ou false. Usamos o método includes() para saber se a origem está ou não na lista, e esse método retornará true ou false. Então chamamos o callback() passando null como primeiro argumento e a constante allowed como segundo. O null que passamos é uma mensagem que será retornada para quem fez a requisição, e deixamos null para que seja retornada a mensagem padrão. O segundo argumento, o allowed, se for true é porque a origem tem permissão para obter informações da API, mas caso seja false não terá permissão.


Profile picture

Ficou com alguma dúvida? Quer sugerir alguma alteração? Me chama aqui no Twitter pra gente bater um papo =)