Tengo el siguiente bit de código:
const production = process.env.PRODUCTION console.log(production) const corsOptions = { origin: production ? 'https://myproductionurl' : 'http://localhost:3000', credentials: true } console.log(corsOptions) app.use(cors(corsOptions))Cuando ejecuto este código, el primer archivo console.log devuelve falso como se desea, sin embargo, la segunda declaración de console.log devuelve la URL de producción como si la variable fuera verdadera.
No estoy seguro de por qué esto es si alguien ve algo, ¡por favor hágamelo saber!
Además, si elimino el ternario y las URL para probar lo que está sucediendo, obtendré origin: false en corsOptions, ¡lo que me está desconcertando aún más!
Las variables de entorno son siempre cadenas, a menos que no estén configuradas, en cuyo caso no estarán undefined .
Si está registrando false , entonces lo configuró en la cadena "false" , que es un valor verdadero.
Puedes probar eso explícitamente:
production !== 'false' ? 'https://myproductionurl' : 'http://localhost:3000',… aunque probablemente debería escribir una prueba que sea más robusta que esa, como:
const isProduction = () => { const env = process.env.PRODUCTION; if (!env) return false; if (env === "false") return false; return true; }y entonces
isProduction() ? 'https://myproductionurl' : 'http://localhost:3000',Actualiza tu lógica ternaria
const env = process.env.PRODUCTION console.log(env) const corsOptions = { origin: env == "production" ? 'https://myproductionurl' : 'http://localhost:3000', credentials: true } console.log(corsOptions) app.use(cors(corsOptions))Porque todas las variables de entorno son cadenas. Y la cadena que es false no tiene un valor booleano de false , por lo tanto, el ? solo vea la cadena que contiene algunos caracteres => por lo tanto, resolviéndolo como verdadero.
const production = 'false' const productionBool = false console.log(production) const corsOptions = { origin: production ? 'https://myproductionurl' : 'http://localhost:3000', originBool: productionBool ? 'https://myproductionurl' : 'http://localhost:3000', credentials: true } console.log(corsOptions) Puede resolverlo, es decir, mediante (String(production).toLowerCase() === 'true')