Configuration
npm install @feathersjs/configuration --save
npm install @feathersjs/configuration --save
@feathersjs/configuration
is a wrapper for node-config which allows to configure a server side Feathers application.
By default this implementation 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 refer to the node-config docs.
Usage
The @feathersjs/configuration
module is an app configuration function that takes a root directory (usually something like __dirname
in your application) and the configuration folder (set to config
by default):
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())
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())
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())
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())
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
or import config from 'config'
directly and use it as documented.
Configuration schema
The application configuration can be validated against a Feathers schema when app.setup (or app.listen
) is called by passing a schema when initializing @feathersjs/configuration
:
import { feathers } from '@feathersjs/feathers'
import { schema, Infer } from '@feathersjs/schema'
import configuration from '@feathersjs/configuration'
const configurationSchema = schema({
$id: 'FeathersConfiguration',
type: 'object',
additionalProperties: false,
required: ['port', 'host'],
properties: {
port: { type: 'number' },
host: { type: 'string' }
}
} as const)
type ServiceTypes = {}
// Use the schema type for typed `app.get` and `app.set` calls
type Configuration = Infer<typeof configurationSchema>
// Use the application root and `config/` as the configuration folder
const app = feathers<ServiceTypes, Configuration>().configure(
configuration(configurationSchema)
)
// Configuration will only be validated now
app
.listen()
.then(() => console.log('Server started'))
.catch((error) => {
// Configuration validation errors will show up here
})
import { feathers } from '@feathersjs/feathers'
import { schema, Infer } from '@feathersjs/schema'
import configuration from '@feathersjs/configuration'
const configurationSchema = schema({
$id: 'FeathersConfiguration',
type: 'object',
additionalProperties: false,
required: ['port', 'host'],
properties: {
port: { type: 'number' },
host: { type: 'string' }
}
} as const)
type ServiceTypes = {}
// Use the schema type for typed `app.get` and `app.set` calls
type Configuration = Infer<typeof configurationSchema>
// Use the application root and `config/` as the configuration folder
const app = feathers<ServiceTypes, Configuration>().configure(
configuration(configurationSchema)
)
// Configuration will only be validated now
app
.listen()
.then(() => console.log('Server started'))
.catch((error) => {
// Configuration validation errors will show up here
})
import { feathers } from '@feathersjs/feathers'
import { schema, Infer } from '@feathersjs/schema'
import configuration from '@feathersjs/configuration'
const configurationSchema = schema({
$id: 'FeathersConfiguration',
type: 'object',
additionalProperties: false,
required: ['port', 'host'],
properties: {
port: { type: 'number' },
host: { type: 'string' }
}
})
// Use the application root and `config/` as the configuration folder
const app = feathers().configure(configuration(configurationSchema))
// Configuration will only be validated now
app
.listen()
.then(() => console.log('Server started'))
.catch((error) => {
// Configuration validation errors will show up here
})
import { feathers } from '@feathersjs/feathers'
import { schema, Infer } from '@feathersjs/schema'
import configuration from '@feathersjs/configuration'
const configurationSchema = schema({
$id: 'FeathersConfiguration',
type: 'object',
additionalProperties: false,
required: ['port', 'host'],
properties: {
port: { type: 'number' },
host: { type: 'string' }
}
})
// Use the application root and `config/` as the configuration folder
const app = feathers().configure(configuration(configurationSchema))
// Configuration will only be validated now
app
.listen()
.then(() => console.log('Server started'))
.catch((error) => {
// Configuration validation errors will show up here
})
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
$ 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"
}
{
"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
$ 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.