Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ambroiseRabier/typeorm-nestjs-migration-example
"Example of how to use migrations feature of TypeORM with NestJS.
https://github.com/ambroiseRabier/typeorm-nestjs-migration-example
docs migrations nestjs nestjs-backend typeorm
Last synced: 2 months ago
JSON representation
"Example of how to use migrations feature of TypeORM with NestJS.
- Host: GitHub
- URL: https://github.com/ambroiseRabier/typeorm-nestjs-migration-example
- Owner: ambroiseRabier
- Created: 2019-05-18T18:57:12.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2019-05-18T19:03:19.000Z (over 5 years ago)
- Last Synced: 2024-08-14T10:16:40.250Z (6 months ago)
- Topics: docs, migrations, nestjs, nestjs-backend, typeorm
- Language: TypeScript
- Size: 80.1 KB
- Stars: 251
- Watchers: 13
- Forks: 30
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
https://docs.nestjs.com/
### TypeORM migration
#### Objectives
Generate and use migrations instead of syncing database. In dev and prod.
This is the recommended method by TypeORM once you have data on prod, to avoid any loss.#### Pre-requisites
TypeORM installed: https://docs.nestjs.com/techniques/database#### Install
> src/app.module.ts
```ts
import { DynamicModule, Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { TypeOrmModule } from '@nestjs/typeorm';
import * as ormconfig from './ormconfig';export function DatabaseOrmModule(): DynamicModule {
// we could load the configuration from dotEnv here,
// but typeORM cli would not be able to find the configuration file.return TypeOrmModule.forRoot(ormconfig);
}@Module({
imports: [
TypeOrmModule.forRoot(ormconfig)
// or
// DatabaseOrmModule(),
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
```> src/ormconfig.ts
```ts
import {ConnectionOptions} from 'typeorm';// You can load you .env file here synchronously using dotenv package (not installed here),
// import * as dotenv from 'dotenv';
// import * as fs from 'fs';
// const environment = process.env.NODE_ENV || 'development';
// const data: any = dotenv.parse(fs.readFileSync(`${environment}.env`));
// You can also make a singleton service that load and expose the .env file content.
// ...// Check typeORM documentation for more information.
const config: ConnectionOptions = {
type: 'postgres',
host: 'localhost',
port: 5432,
username: 'postgres',
password: 'pwd',
database: 'migrationexample',
entities: [__dirname + '/**/*.entity{.ts,.js}'],// We are using migrations, synchronize should be set to false.
synchronize: false,// Run migrations automatically,
// you can disable this if you prefer running migration manually.
migrationsRun: true,
logging: true,
logger: 'file',// Allow both start:prod and start:dev to use migrations
// __dirname is either dist or src folder, meaning either
// the compiled js in prod or the ts in dev.
migrations: [__dirname + '/migrations/**/*{.ts,.js}'],
cli: {
// Location of migration should be inside src folder
// to be compiled into dist/ folder.
migrationsDir: 'src/migrations',
},
};export = config;
```> package.json
```json
"scripts": {
"typeorm": "ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli.js --config src/ormconfig.ts",
"typeorm:migrate": "npm run typeorm migration:generate -- -n",
"typeorm:run": "npm run typeorm migration:run"
}
```#### Usage
1. `npm run typeorm:migrate `
2. Check your migration queries in `src/migrations`
3. `npm run start:dev` or `npm run start:prod` or `npm run typeorm:run`If everything went well, you have up to date entites and a `migrations` table listing applied migrations.
#### Additionnal information
- If you set `migrationsRun` to false in ormconfig.ts, you will have to use `npm run typeorm:run` to apply the migration, otherwise all migrations are applied automatically at application start.
- If you do not set `--config` parameter typeorm seek a valid configuration file at the root of the project.
- You do not want `ormconfig.ts` at the root of the project, otherwise it change /dist structure, you would have to change `start:prod: node dist/main.js` to `start:prod: node dist/src/main.js`.@SeeAlso https://github.com/typeorm/typeorm/blob/master/docs/migrations.md
@SeeAlso https://github.com/typeorm/typeorm/blob/master/docs/using-cli.md#notes-on-entity-files-written-in-typescript