Configuration
npm install @feathersjs/configuration --save
@feathersjs/configuration
is a wrapper for node-config to make configuration values available via app.get which can then be used to configure an application.
By default it will look in config/*
for default.json
. It will be merged with other configuration files in the config/
folder using the NODE_ENV
environment variable. So setting NODE_ENV=production
will merge config/default.json
with config/production.json
.
For more information also see the node-config docs.
Usage
app.configure(configuration())
loads the configuration from node-config
and makes it available via app.get()
.
import { feathers } from '@feathersjs/feathers' import configuration from '@feathersjs/configuration' // Use the application root and `config/` as the configuration folder const app = feathers().configure(configuration()) // Will return 3030 with `{ "port": 3030 }` in config/default.json app.get('port')
Important
Direct access to nested config properties is not supported via app.get()
. To access a nested config property (e.g. Customer.dbConfig.host
, use app.get('Customer').dbConfig.host
.
Configuration validation
app.configure(configuration(validator))
loads the configuration from node-config
, makes it available via app.get()
and validates the original configuration against a Feathers schema validator when app.setup (or app.listen) is called.
import { feathers } from '@feathersjs/feathers' import { Ajv } from '@feathersjs/schema' import { Type, getValidator } from '@feathersjs/typebox' import type { Static } from '@feathersjs/typebox' import configuration from '@feathersjs/configuration' const configurationSchema = Type.Object( { port: Type.Number(), host: Type.String() }, { $id: 'Configuration', additionalProperties: false } ) const configurationValidator = getValidator(configurationSchema, new Ajv()) type ServiceTypes = {} // Use the schema type for typed `app.get` and `app.set` calls type Configuration = Static<typeof configurationSchema> // Use the application root and `config/` as the configuration folder const app = feathers<ServiceTypes, Configuration>().configure(configuration(configurationValidator)) // Configuration will only be validated now app .listen() .then(() => console.log('Server started')) .catch((error) => { // Configuration validation errors will show up here console.log(error.data) })
Environment variables
As recommended by node-config, it is possible to override the configuration with custom variables by passing a JSON object in the NODE_CONFIG
environment variable:
$ export NODE_CONFIG='{ "port": 8080, "host": "production.app" }' $ node myapp.js
Individual environment variables can be used through Custom Environment Variables by creating a config/custom-environment-variables.json
like this:
{ "port": "PORT", "mongodb": "MONGOHQ_URL" }
Configuration directory
By default, Feathers will use the config/
directory in the root of your project’s source directory. To change this, e.g., if you have Feathers installed under the server/
directory and you want your configuration at server/config/
, you have to set the NODE_CONFIG_DIR
environment variable in app.js
before importing @feathersjs/configuration
:
$ export NODE_CONFIG_DIR=server/config $ node myapp.js
Note
The NODE_CONFIG_DIR environment variable isn’t used directly by @feathersjs/configuration but by the node-config module that it uses. For more information on configuring node-config settings, see the Configuration Files Wiki page.