quaerateum
Version:
Simple 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 JS.
88 lines (66 loc) • 2.06 kB
Markdown
---
---
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 sqlite
```
or
```
$ npm i -s mikro-orm mongodb
$ npm i -s mikro-orm mysql2
$ npm i -s mikro-orm sqlite
```
**`mikro-orm.middleware.ts`**
```typescript
import { Injectable, NestMiddleware, MiddlewareFunction } from '@nestjs/common';
import { MikroORM, RequestContext } from 'mikro-orm';
@Injectable()
export class MikroOrmMiddleware implements NestMiddleware {
constructor(private readonly orm: MikroORM) { }
resolve(...args: any[]): MiddlewareFunction {
return (req, res, next) => {
RequestContext.create(this.orm.em, next);
};
}
}
```
```typescript
import { Logger, Module } from '@nestjs/common';
import { EntityManager, MikroORM } from 'mikro-orm';
import { MikroOrmMiddleware } from './mikro-orm.middleware';
@Module({
providers: [
MikroOrmMiddleware,
{ provide: MikroORM, useFactory: async () => {
const logger = new Logger(MikroORM.name);
return MikroORM.init({
entitiesDirs: ['./src/entities'],
dbName: '...',
logger: logger.log.bind(logger),
});
}},
{ provide: EntityManager, useFactory: (orm: MikroORM) => orm.em, inject: [MikroORM] },
{ provide: 'UserRepository', useFactory: (em: EntityManager) => em.getRepository(User), inject: [EntityManager] },
],
})
export class AppModule {}
```
```typescript
import { Inject } from '@nestjs/common';
export const InjectRepository = (entity: any) => Inject(`${entity.name}Repository`);
```
and use it like this:
```typescript
constructor(
@InjectRepository(File)
private readonly fileRepository: EntityRepository<File>
) { }
```
[← Back to table of contents](index.md