Skip to content

Instantly share code, notes, and snippets.

@AnsonT
Last active July 7, 2021 23:51
Show Gist options
  • Save AnsonT/a16988d31fdcd5c2ff4d05b4de1715d0 to your computer and use it in GitHub Desktop.
Save AnsonT/a16988d31fdcd5c2ff4d05b4de1715d0 to your computer and use it in GitHub Desktop.
Node.JS Config example #dotenv #convict #nodejs
LOG_LEVEL=
CASSANDRA_KEYSPACE=
CASSANDRA_USER=
CASSANDRA_PASSWORD=
CASSANDRA_BOOTSTRAP=
import dotenv from 'dotenv'
import convict from 'convict'
import { join } from 'path'
dotenv.config()
const defaultEnv = 'production'
const env = process.env.NODE_ENV || defaultEnv
const envPath = join(__dirname, '..', `.env.${env}`)
dotenv.config({ path: envPath })
convict.addFormat({
name: 'string-array',
validate: (val) => {},
coerce: (val) => val.split(',').map(item => item.trim())
})
const config = convict({
logLevel: {
doc: 'The output log level',
format: ['DEBUG', 'INFO', 'ERROR'],
default: 'INFO',
env: 'LOG_LEVEL'
},
env: {
doc: 'The application environment',
format: ['production', 'ote', 'test', 'development'],
default: defaultEnv,
env: 'NODE_ENV'
},
ip: {
doc: 'The IP address to bind',
format: 'ipaddress',
default: '127.0.0.1',
env: 'IP_ADDRESS'
},
port: {
doc: 'The port to bind',
format: 'port',
default: 3000,
env: 'PORT'
},
db: {
bootstrap: {
doc: 'Cassandra bootstrap IP addresses',
format: 'string-array',
default: ['127.0.0.1'],
env: 'CASSANDRA_BOOTSTRAP'
},
userName: {
doc: 'Cassandra user name',
format: String,
default: null,
env: 'CASSANDRA_USER'
},
password: {
doc: 'Cassandra password',
format: String,
default: null,
sensitive: true,
env: 'CASSANDRA_PASSWORD'
},
keyspace: {
doc: 'Cassandra keyspace',
default: null,
format: String,
env: 'CASSANDRA_KEYSPACE'
}
}
})
export default config.getProperties()
@sadranyi
Copy link

been trying to get this to work for days now, Have been able to use convict to read .env files

@AnsonT
Copy link
Author

AnsonT commented Jun 19, 2020

const envPath = join(__dirname, '..', .env.${env})
dotenv.config({ path: envPath })

In this example, you'll want a '.env.production' file in the directory above the config.js file.
You can just load the .env file using dotenv.config() function

@sadranyi
Copy link

sadranyi commented Jun 20, 2020 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment