Effortless Environment Management in Node and Express
Environment variables are a cornerstone of any professional Node.js and Express application. They allow for secure and flexible management of sensitive data such as API keys, database credentials, and app-specific settings. Here’s how you can properly set up and manage environment variables to make your app production-ready.
Step 1: Setting Up the .env File
Begin by creating a .env file in the root of your project. Add the following variable to define your development environment:
NODE_ENV=development
It’s a good practice to create a .env.example file as well. This file provides a reference for collaborators about which variables are required, without exposing sensitive values.
Next, update your .gitignore file to ensure the .env file is not pushed to version control. This keeps your sensitive data secure.
Step 2: Loading Environment Variables with dotenv-cli
In development, environment variables in the .env file need to be loaded into the runtime environment. For this, install dotenv-cli:
npm install dotenv-cli --save-dev
Update the dev script in your package.json to use dotenv-cli with nodemon:
"scripts": {
"dev": "dotenv -- nodemon src/server.ts"
}
Run the app using npm run dev, and your environment variables will now be accessible in your code.
Step 3: Centralizing Variables in a Config File
Rather than referencing process.env throughout your app, centralize all environment variables in a configuration file. Create a config.ts file in the src folder with the following:
export const config = {
env: process.env.NODE_ENV || "development",
port: parseInt(process.env.PORT || "3000", 10),
};
This approach ensures:
- Default values for variables.
- Easy modification and centralized access.
- Better maintainability for larger projects.
Step 4: Updating the App to Use the Config File
Replace direct references to process.env in your app with the config object. For example:
- In
server.ts,console.log(`Running in ${process.env.NODE_ENV}`); - In
index.ts, replace hardcoded port values withapp.listen(config.port, () => { console.log(`API running on port ${config.port}`); });
Step 5: Testing Your Setup
Update your .env file to include the PORT variable:
PORT=3000
Don’t forget to add this variable to your .env.example file as well. Use tools like the REST Client in VS Code to test API requests and verify everything works as expected.
Why This Matters
Centralizing environment variables and using tools like dotenv-cli improves the scalability, security, and maintainability of your app. It prevents hardcoded values, reduces errors, and simplifies onboarding for new developers.
With environment variables properly configured, your Node.js and Express app is now more robust and ready for production. Stay tuned for the next part of the series, where we’ll dive into additional best practices and advanced configurations!