undeexcepturi
Version:
TypeScript ORM for Node.js based on Data Mapper, Unit of Work and Identity Map patterns. Supports MongoDB, MySQL, PostgreSQL and SQLite databases as well as usage with vanilla JavaScript.
88 lines (65 loc) • 2.85 kB
Markdown
---
title: Installation & Usage
---
First install the module via `yarn` or `npm` and do not forget to install the database driver as well:
```
$ yarn add mikro-orm mongodb
$ yarn add mikro-orm mysql2
$ yarn add mikro-orm pg
$ yarn add mikro-orm sqlite
```
or
```
$ npm i -s mikro-orm mongodb
$ npm i -s mikro-orm mysql2
$ npm i -s mikro-orm pg
$ npm i -s mikro-orm sqlite
```
Next you will need to enable support for [decorators](https://www.typescriptlang.org/docs/handbook/decorators.html) in `tsconfig.json` via:
```json
"experimentalDecorators": true
```
Then call `MikroORM.init` as part of bootstrapping your app:
```typescript
const orm = await MikroORM.init({
entities: [Author, Book, BookTag],
dbName: 'my-db-name',
clientUrl: '...', // defaults to 'mongodb://localhost:27017' for mongodb driver
autoFlush: false, // read more here: https://mikro-orm.io/unit-of-work/
});
console.log(orm.em); // access EntityManager via `em` property
```
You can also provide paths where you store your entities via `entitiesDirs` array. Internally it uses [`globby`](https://github.com/sindresorhus/globby) so you can use [globbing patterns](https://github.com/sindresorhus/globby#globbing-patterns).
```typescript
const orm = await MikroORM.init({
entitiesDirs: ['./dist/app/**/entities'],
// ...
});
```
You should provide list of directories, not paths to entities directly. If you want to do that instead, you should use `entities` array and use `globby` manually:
```typescript
import { sync } from 'globby';
const orm = await MikroORM.init({
entities: sync('./dist/app/**/entities/*.js').map(require),
// ...
});
```
Internally, `MikroORM` uses [performs analysis](./metadata-cache.md) of source files of entities to sniff types of all properties. This process can be slow if your project contains lots of files. To speed up the discovery process a bit, you can provide more accurate paths where your entity source files are:
```typescript
const orm = await MikroORM.init({
entitiesDirs: ['./dist/entities'], // path to your JS entities (dist), relative to `baseDir`
entitiesDirsTs: ['./src/entities'], // path to your TS entities (source), relative to `baseDir`
// ...
});
```
Then you will need to fork entity manager for each request so their identity maps will not collide. To do so, use the `RequestContext` helper:
```typescript
const app = express();
app.use((req, res, next) => {
RequestContext.create(orm.em, next);
});
```
More info about `RequestContext` is described [here](./identity-map
Now you can start [defining your entities](./defining-entities.md) (in one of the `entitiesDirs` folders).