항해 99

항해 99 57일차 11/14일

코딩이좋아요 2022. 11. 15. 01:13

오늘은 프로젝트 기본 틀을 잡았다. 

타입스크립트 환경에서 ORM 으로 시퀄라이즈르르 사용하기로 했고 타입스크립트로는 처음 사용해보는 것이였다.

강의를 들을때 부터 생각했던 걱정이 시퀄라이즈 사용하는 방법이였는데 역시나 쉽게쉽게 사용할 수 있는게 아니였다.

구글링을 엄청 했고 그중에 찾은 블로그가 도움이 되었다

https://velog.io/@dlawogus/NodeJSExpressTypescript%EB%A1%9CSequelize%ED%99%98%EA%B2%BD%EA%B5%AC%EC%B6%95

타입스크립트 기본 셋팅

폴더 생성 깔아야 할 것들

더보기

npm init -y
npm i -D typescipt
tsconfig.json 만들기
npm i express @types/express sequelize mysql2 sequelize-cli @types/node
npm i cors cookie-parser dotenv @types/cors @types/cookie-parser @types/dotenv 

 

npx sequelize init 을 사용하면 config파일과 models 폴더들이 생성 되는데

config파일안에 있는 congfig.json파일을 config.ts파일로 바꾸고 밑에 코드를 붙혀준다

더보기
import * as dotenv from 'dotenv';
dotenv.config();

export const config = {
    development : {
        username : process.env.DB_USERNAME || 'root',
        password : process.env.DB_PASSWORD,
        database : process.env.DB_DBNAME || 'typescript_test',
        host : process.env.DB_HOST || 'localhost',
        port : process.env.DB_PORT || 3306,
        dialect : "mysql"
    }
}

models파일안에 index.js파일안에 있는 것을 지우고 index.ts로 바꾼다. 바꾸고 아래 코드를 넣어준다.

더보기
import {Sequelize} from 'sequelize';
import {config} from '../config/config'

// export const sequelize = new Sequelize('typescript_test', 'root','Jaehyeon2!',{
//     host : 'localhost',
//     dialect : 'mysql',
// })

export const sequelize = new Sequelize(
    config.development.database,
    config.development.username,
    config.development.password,
    {
        host: config.development.host,
        dialect: 'mysql'
    }
)

app.ts파일을 만들고 실행해주면 된다.

더보기

 


import express from 'express';
import cors from 'cors';
import cookieParser from 'cookie-parser';
import dotenv from 'dotenv';
import helmet from 'helmet'; //악성 스크립트 보호
// import { sequelize } from './models';
import { Request, Response, NextFunction } from 'express';
import { sequelize } from './src/models/index';
import indexRouter from './src/routes/index';


dotenv.config();
const app = express();
const port = 3001;
// const prod: boolean = process.env.NODE_ENV === 'production';


// app.set('port', prod ? process.env.PORT : 3000);
// sequelize
//   .sync({ force: false }) //true일시 테이블 초기화
//   .then(() => {
//     console.log('데이터베이스 연결 성공');
//   })
//   .catch((err: Error) => {
//     console.error(err);
//   });


// if (prod) {
//   app.use(helmet());
//   app.use(
//     cors({
//       origin: '*',
//       credentials: true,
//     })
//   );
// } else {
//   app.use(
//     cors({
//       origin: true,
//       credentials: true,
//     })
//   );
// }


app.use(express.json());
app.use(cookieParser());


app.use('/', indexRouter);


app.use((err: any, req: Request, res: Response, next: NextFunction) => {
  console.error(err);
  res.status(500).send('서버 에러 발생! 서버 콘솔을 확인하세요.');
});


app.listen(port, async () => {
  console.log(`${port}로 실행중`);
  // authenticate 메소드로 연결 확인
  await sequelize
    .authenticate()
    .then(async () => {
      console.log('DB 연결완료');
    })
    .catch((e) => {
      console.log(e);
    });
});