본문 바로가기

Project/TIL

20.03.16 ShareBook TIL

TypeScript-Sequelize를 이용하여 데이터베이스를 생성해보기로 하였다.

일단 user table 하나를 만들기 위해 어떻게 해야하는지 여러 레퍼런스들 찾아보았다.

class 문법으로 작성하는 것도 있고 table @ 이런 문법으로 작성하는 것도 있어서 어떻게 적용해야하는지 감이 오질 않았다.

먼저 config 폴더를 만들고 database.ts를 만들었다.

// config/database.ts

import { Sequelize } from 'sequelize-typescript';
import 'dotenv/config';

export const sequelize = new Sequelize({
  database: 'sharebook',
  dialect: 'mysql',
  username: process.env.USER,
  password: process.env.PASS,
  host: process.env.DB_HOST,
  storage: ':memory:',
});

 

그리고 models 폴더를 만들고 Users.ts를 만들었다.

// models/User.ts

import {
  Table,
  Column,
  Model,
  DataType,
  AllowNull,
  Unique,
  HasMany,
  BelongsToMany,
  PrimaryKey,
} from 'sequelize-typescript';

@Table
export class Users extends Model<Users> {
  @Unique
  @PrimaryKey
  @AllowNull(false)
  @Column(DataType.INTEGER)
  id: number | undefined;

  @AllowNull(false)
  @Column(DataType.STRING(30))
  name: string | undefined;

  @AllowNull(false)
  @Column(DataType.STRING(120))
  nickname: string | undefined;

  @AllowNull(false)
  @Column(DataType.STRING(120))
  password: string | undefined;

  @AllowNull(false)
  @Column(DataType.STRING(120))
  gender: string | undefined;

  @AllowNull(false)
  @Column(DataType.STRING(120))
  region: string | undefined;
}

 

아직 여러 테이블을 만드는것이 아니라서 딱히 관계 설정등은 미루어두었다. 여기까만해도 이해가 잘 되지않아 시간을 많이 잡아먹었다.

그리고 models 폴더에 index.ts파일을 만들어 Users table을 추가해주었다.

// models/index.ts

import { Sequelize } from 'sequelize-typescript';
import { Users } from './Users';

const env = process.env.NODE_ENV || 'development';
const config = require('../config/database')[env];

// console.log(config);
const { database, dialect, username, password, host } = config;
export const sequelize = new Sequelize({
  database,
  dialect,
  username,
  password,
  host,
  models: [Users],
});

// TODO: Check connection
sequelize
  .authenticate()
  .then(() => console.log('Connection Successed!'))
  .catch((err: Error) => console.error('Unable to connect to the MySQL', err));

 

src/main.ts에서 

import { sequelize } from '../models';

sequelize.sync();

 

을 추가 해주고 서버를 실행시켰는데 models/index.ts에서 const config = require('../config/database')[env];

config가 undefind가 나와 오류가 났다. 여러가지를 시도해보다가 config 폴더에 config.json을 만들어

// config/config.json

{
  "development": {
    "username": "root",
    "password": "",
    "database": "sharebook",
    "host": "localhost",
    "dialect": "mysql"
  }
}

 

작성하고 const config = require('../config/config')[env];로 변경하였다.

이제 데이터베이스에 Users table이 생성되었는데 이렇게 하는게 맞는건지는 잘 모르겠다.

 

'Project > TIL' 카테고리의 다른 글

20.03.18 ShareBook TIL  (0) 2020.03.19
20.03.17 ShareBook TIL  (0) 2020.03.18
20.03.15 ShareBook TIL  (0) 2020.03.16
20.03.14 ShareBook TIL  (0) 2020.03.15
20.03.13 ShareBook TIL  (0) 2020.03.13