The database configuration should not be changing during the different requests, that’s why it is a good idea to store the configuration in a central place of our express application. There are multiple ways of doing this, e.g. you can use app.locals for this. Or you can use the app.set method.
But the best option in my eyes is to have a global configuration file, because using the methods above requires access to the app object (see below how this works).
Using a global configuration file
1. Create a new file in the /app folder named config.js
2. Add a global configuration object
const Config = {};
module.exports = Config;
3. Add the configuration for our database
const Config = {
serverConfig: {
hostName: process.env.NODE_ENV === 'development' ? 'dev.example.com' : 'www.example.com', // Host name of your server
connection: {
port: '3002', // Proton port on your server
},
},
databaseConfig: {
filePath: 'node-demo.nsf', // The database file name
}
};
module.exports = Config;
The configuration above checks the environment variables. In development mode, the dev.example.com server is used, otherwise www.example.com.
4. Import the file in your code
const config = require('../config');
5. Use it by deconstructing the values
const { serverConfig, databaseConfig } = config;
This can be used everywhere in your application.
Using app.set
1. Open the file app.js in the /app folder
2. Add the following code before the module.export statement:
app.set('db', {
serverConfig: {
hostName: 'your.server.com', // Host name of your server
connection: {
port: '3002', // Proton port on your server
},
},
databaseConfig: {
filePath: 'node-demo.nsf', // The database file name
}
});
3. If you want to have different configurations depending of development / productive environment, you can compute the property like this:
...
hostName: app.get('env') === 'development' ? 'your.devserver.com' : 'your.server.com',
...
4. To use the configuration in the router, just use the app.get method (provided by the request object) and deconstruct the values:
router.get('/', (req, res) => {
const { serverConfig, databaseConfig } = req.app.get('db');
...