ABOUT ME

Today
Yesterday
Total
  • typeOrm
    카테고리 없음 2023. 12. 22. 10:43

    npm i @nestjs/typeorm typeorm mysql2

    typeorm 패키


    import { Module } from '@nestjs/common';
    import { TypeOrmModule } from '@nestjs/typeorm';

    import { AppController } from './app.controller';
    import { AppService } from './app.service';
    import { Post } from './post/entities/post.entity';
    import { PostModule } from './post/post.module';

    @Module({
      imports: [
        TypeOrmModule.forRoot({
          type: 'mysql',
          host: 'localhost',
          port: 3306,
          username: '여러분들의 데이터베이스 아이디',
          password: '여러분들의 데이터베이스 비밀번호',
          database: 'board',
          entities: [Post],
          synchronize: true,
        }),
        PostModule,
      ],
      controllers: [AppController],
      providers: [AppService],
    })
    export class AppModule {}

     

    app.module.ts version 1

    중요한 코드가 모두 노출된다.

     


    npm i @nestjs/config joi

    을 설치해서 dotenv역할을한다.


    import Joi from 'joi';

    import { Module } from '@nestjs/common';
    import { ConfigModule, ConfigService } from '@nestjs/config';
    import { TypeOrmModule, TypeOrmModuleOptions } from '@nestjs/typeorm';

    import { AppController } from './app.controller';
    import { AppService } from './app.service';
    import { Post } from './post/entities/post.entity';
    import { PostModule } from './post/post.module';

    const typeOrmModuleOptions = {
      useFactory: async (
        configService: ConfigService,
      ): Promise<TypeOrmModuleOptions> => ({
        type: 'mysql',
        host: configService.get('DB_HOST'),
        port: configService.get('DB_PORT'),
        username: configService.get('DB_USERNAME'),
        password: configService.get('DB_PASSWORD'),
        database: configService.get('DB_NAME'),
        entities: [Post],
        synchronize: configService.get('DB_SYNC'),
        logging: true,
      }),
      inject: [ConfigService],
    };

    @Module({
      imports: [
        ConfigModule.forRoot({
          isGlobal: true,
          validationSchema: Joi.object({
            DB_HOST: Joi.string().required(),
            DB_PORT: Joi.number().required(),
            DB_USERNAME: Joi.string().required(),
            DB_PASSWORD: Joi.string().required(),
            DB_NAME: Joi.string().required(),
            DB_SYNC: Joi.boolean().required(),
          }),
        }),
        TypeOrmModule.forRootAsync(typeOrmModuleOptions),
        PostModule,
      ],
      controllers: [AppController],
      providers: [AppService],
    })
    export class AppModule {}


    이건 주요 정보가 노출되지 않는다. 


    post.entity.ts

     

    import { IsNumber, IsString } from 'class-validator';
    import {
      Column,
      CreateDateColumn,
      DeleteDateColumn,
      Entity,
      PrimaryGeneratedColumn,
      UpdateDateColumn,
    } from 'typeorm';

    @Entity({
      name: 'posts',
    })
    export class Post {
      @PrimaryGeneratedColumn()
      id: number;

      @IsString()
      @Column('varchar', { length: 50, nullable: false })
      title: string;

      @IsString()
      @Column('varchar', { length: 1000, nullable: false })
      content: string;

      @IsNumber()
      @Column('int', { select: false, nullable: false })
      password: number;

      @CreateDateColumn()
      createdAt: Date;

      @UpdateDateColumn()
      updatedAt: Date;

      @DeleteDateColumn()
      deletedAt?: Date;
    }

Designed by Tistory.