Help us understand the problem. What is going on with this article?

NestJSのTypeORMの設定

NestJS TypeORMの設定 ※postgresql

※元のソースは下記を使用
 https://qiita.com/akasatana12345/items/9c3168336b5866a70fe8 

モジュールのインストール

 npm install --save @nestjs/typeorm typeorm ts-node pg

事前準備

自分のローカルDBに'test'データベースを作成

TypeORMの設定

ormconfigファイルの作成

ルートディレクトリにormconfig.jsを作成

ormconfig.js
// FIXME 実際は環境変数より取得すべき
module.exports = {
    name: 'default',
    type: 'postgres',
    host: 'localhost',
    port: 5432,
    username: 'postgres',
    password: 'postgres',
    database: 'test',
    synchronize: false,
    logging: true,
    entities: [
        'src/database/entities/**/*entity.ts',
    ],
    migrations: ['src/database/migrations/**/*.ts'],
    cli: {
        entitiesDir: 'src/database/entities',
        migrationsDir: 'src/database/migrations',
    },
}

Entityを作成

※migrationのフォルダを作成する。

src/database/entities/user.entity.ts
import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';

@Entity('user')
export class User {
  @PrimaryGeneratedColumn()
  id?: number;

  @Column({ name: 'first_name', length: '50', type: 'varchar' })
  firstName: string;

  @Column({ name: 'last_name', length: '50', type: 'varchar' })
  lastName: string;
}

package.jsonの編集(migrationのコマンド追記)

下記追記

package.json
    "typeorm": "ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli.js",
    "migration:create": "npm run typeorm migration:create -- -n",
    "migration:generate": "npm run typeorm migration:generate -- -n",
    "migration:run": "npm run typeorm migration:run",
    "migration:revert": "npm run typeorm migration:revert",

マグレーションファイルの作成

 npm run migration:generate init

src/database/migrations/の直下にマイグレーションファイルが作成される。

マグレーションファイルの適用

 npm run migration:run

testデータベースにuserテーブルとmigrationsテーブルが作成される。

NestJSの設定

src/app.module.ts
  imports: [
    // TypeOrmModule.forRoot()←これでやるとデフォルトでormconfig.jsを読み込んでくれるが
    // 実行時にうまく行かないので、TypeORMとNestJSで設定ファイルは別と考えた方がよい?
    TypeOrmModule.forRoot({
      type: 'postgres',
      host: 'localhost',
      port: 5432,
      username: 'postgres',
      password: 'postgres',
      database: 'test',
      entities: ['dist/database/entities/**/*.entity{.ts,.js}'],
      synchronize: true,
    }),

後はNestJSのチュートリアルと同様
https://docs.nestjs.com/techniques/database

まとめ

NestJSにてormconfig.jsを読み込んだ時にエラーが出たので、TypeORMとNestJSの設定ファイルは分けて実装した。
他に良い方法があると思うので、引き続き調査してみます。

上記プロジェクトのソース(参考)
 https://github.com/kyosuke12345/nest-typeorm-test

akasatana12345
Sierで働いてます。 ■経歴 前職…ゲーム会社(3年) Unity(C#)、PHP、C++ 現在… Sier(5年目?) Java ■興味がある技術 ・TypeScript
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away