Dominion framework is using small configuration set covering server address, API’s URL prefix and CORS settings. You are also free to use configuration file for project specific settings. Configurations file should export object as following:
module.exports = {
server: {
protocol: "http",
host: "localhost",
port: 7042,
url: "http://localhost:7042"
},
router: {
urlPrefix: "",
primaryKeyPattern: "\\d+"
// e.g. "[a-f\d]{8}-[a-f\d]{4}-4[a-f\d]{3}-[89ab][a-f\d]{3}-[a-f\d]{12}"
},
cors: {
origin: ["http://localhost:7042"],
methods: ["OPTIONS", "GET", "POST", "PUT", "DELETE"],
headers: ["Content-Type", "Set-Cookies", "Authorization"],
credentials: false,
maxAge: 5 /* seconds */
}
};
Name | Description |
---|---|
server.protocol | Protocol to be used by Node server: https or http (default). |
server.host | Server host, e.g. localhost . |
server.port | Server port, e.g. 7042 . |
server.path | Path to IPC endpoint, e.g. \\\\.\\pipe\\89d9d208-80a2-4a00-88f1-09a4c4329cf3 or process.env.PORT for iisnode. Most likely, you will need it only when running your application on Microsoft Azure under IIS. Note, server.port will be ignored if server.path is present in config. |
server.url | Server external URL. Is used only for OpenAPI documentation. Also, maybe used in the code, for example for links in emails. |
router.urlPrefix | URI prefix, that will be prepended to all endpoints, e.g. api/v2/ . |
router.primaryKeyPattern | RegExp pattern for identifiers, e.g. \\d+ . You’ll need to change it if you are using hash or uuid keys in models. |
cors.origin | Origin which is allowed to make API calls. May be (i) * for any origin, use it only if you really need it, (ii) [url array] - list of allowed origins, (iii) () => {} function that returns dynamic array of allowed origins. |
cors.methods | List of allowed HTTP methods, e.g. ["GET", "POST", "PUT", "DELETE"] . |
cors.headers | List of allowed HTTP headers, e.g. ["Content-Type", "X-Items-Total"] . |
cors.maxAge | TTL of CORS response. |
Configuration from above is used by default in Dominion framework.
To overwrite them you can create folder config
in project root
directory containing index.js
file. Framework is expecting this file
to return JS object with configuration. Consequently, you
can take advantage of it to implement additional logic in configuration.
For example, you can load some props from environment variables:
module.exports = {
server: {
host: process.env.APPLICATION_HOST,
port: process.env.APPLICATION_PORT
}
}
Also you can make different config files for different environments
and implement their resolution in index.js
. For example:
// File config/index.js
switch (process.env.NODE_ENV) {
case ("production"):
config = require("./config.prod");
break;
case ("test"):
config = require("./config.test");
break;
default:
config = require("./config.dev");
}
module.exports = config;