Synopsis
Adds a new DataSource class and config files to a LoopBack application.
lb4 datasource [options] [<name>]
Options
--connector
: Name of datasource connector
This can be a connector supported by LoopBack / Community / Custom.
Standard options
-h, --help
- Print the generator’s options and usage.
--skip-cache
- Do not remember prompt answers. Default is false.
--skip-install
- Do not automatically install dependencies. Default is false.
-c, --config
- JSON file name or value to configure options
--format
- Format generated code using
npm run lint:fix
For example,
lb4 app --config config.json
lb4 app --config '{"name":"my-app"}'
cat config.json | lb4 app --config stdin
lb4 app --config stdin < config.json
lb4 app --config stdin << EOF
> {"name":"my-app"}
> EOF
-y, --yes
- Skip all confirmation prompts with default or provided value
Arguments
<name>
- Required name of the datasource to create as an argument to the
command. If provided, the tool will use that as the default when it prompts for
the name.
Interactive Prompts
The tool will prompt you for:
- Name of the datasource. (dataSourceName) If the name had been supplied from the command line, the prompt is skipped and the datasource is built with the name from the command-line argument.
- Name of connector. If not supplied via command line, you will be presented
with a list of connector to select from (including an
other
option for custom connector). - Connector configuration. If the connector is not a custom connector, the CLI will prompt for the connector configuration information.
Output
Once all the prompts have been answered, the CLI will do the following:
- Install
@loopback/repository
and the connector package (if it’s not a custom connector). - Create a DataSource class which receives the connector config using
Dependency Injection as follows:
/src/datasources/${dataSourceName}.datasource.ts
. The connector configuration provided via CLI is available via static propertydefaultConfig
. - Update
/src/datasources/index.ts
to export the newly created DataSource class.
Legacy JSON-based configuration
Datasources created by a CLI version from before April 2020 are using JSON-based file convention for defining datasources:
/src/datasources/${dataSourceName}.datasource.config.json
contains datasource configuration in JSON format, e.g. the connector name, target host & port, credentials, and so on./src/datasources/${dataSourceName}.datasource.ts
defines a datasource class, the default configuration is loaded from the JSON file.
CLI commands like lb4 repository
and lb4 service
support both the old
(JSON-based) and the current (pure TypeScript) styles, there are no changes
immediately needed to make your existing project work with the recent CLI
versions.
However, we recommend to eventually migrate existing datasource files to the new style.
Migration guide
-
Open
{dataSourceName}.datasource.ts
file and replace import ofconfig
from the JSON file with the actual content of the JSON file.For example:
-import config from './db.datasource.config.json'; + +const config = { + "name": "db", + "connector": "memory", + "localStorage": "", + "file": "./data/db.json", +};
-
Save the file, run Prettier to fix the coding style (change double-quotes
"
to single-quotes'
, remove quotes from property names likeconnector
andfile
).Example output using LoopBack’s coding style:
const config = { name: 'db', connector: 'memory', localStorage: '', file: './data/db.json', };
-
Add a static
defaultConfig
property to your datasource class.For example:
export class DbDataSource extends juggler.DataSource { static dataSourceName = 'db'; + static readonly defaultConfig = config; constructor(
-
Modify the tests importing the default datasource configuration from the JSON file, get the default configuration via the new static property instead.
This is typically needed by tests for service proxies, which are are working with a datasource connected to a web service. Datasources connected to a database usually don’t need different configuration for tests.
For example:
-import GEO_CODER_CONFIG from '../datasources/geocoder.datasource.config.json'; +import {GeocoderDataSource} from '../datasources/geocoder.datasource'; //... export function getProxiedGeoCoderConfig(proxy: HttpCachingProxy) { - return merge({}, GEO_CODER_CONFIG, { + return merge({}, GeocoderDataSource.defaultConfig, { options: {
-
Delete the datasource JSON file, it’s no longer needed.