#Understanging ENV variables in PayloadCMS

12 messages · Page 1 of 1 (latest)

wicked thistle
#

Leaving aside public variables and focusing on backend ones.

When I access a variable (e.g. procee.env.ENVIRON) from server.ts file, I can read the value.

When I do the same in my custom core code (called inside custom endpoint inside server.ts file) it is undefined. These variables are not accessed by front-end.

server.ts

import { processGetAccountDetails } from './core/vault/controller';
console.log("server | ENVIRON: ", process.env.ENVIRON) // works
router.get('/vault/accounts', (req: any, res) => {
    processGetAccountDetails(req,res)
});

/vault/controller/index.ts

require('dotenv').config();
console.log("vault controller | ENVIRON: ", process.env.ENVIRON) // undefined

This happens seemingly at random. Some files it works, other not. What am I missing?

I must add, this is only an issue in production, locally all works as expected.

cedar sandal
wicked thistle
#

Like I said, I explicitly don't need them in admin panel. I need them in backend as I am using them (I have around 30). In some files they are undefined in production and I cannot find any pattern as to why.

sweet agate
#

@wicked thistle Are they defined in the same .env with your payload env vars?

#

If that's the case, then it makes sense

wicked thistle
#

Yes, all in the same as payload secret var

sweet agate
#

@wicked thistle Payload will automatically supply any present env variables that are prefixed with PAYLOAD_PUBLIC_ directly to the Admin panel.

#

However, it seems like you want to use them in the backend

#

Maybe create an additional .env with your custom env vars

#

and use dotenv to also include that

cinder wave
#

I chatted back and forth with some others about this same topic in that discussion. Basically, you will need to add

dotenv.config({
  path: path.resolve(__dirname, '../.env'),
});

atop your payload config file, and your server.ts file