관리 메뉴

나의 개발일지(김지헌)

항해 99 81일차 12/08일 본문

항해 99

항해 99 81일차 12/08일

코딩이좋아요 2022. 12. 9. 02:23

오늘은 예외처리를 마저하고 배포용 server.ts 코드를 수정했다.

import express from 'express';
import cors from 'cors';
import cookieParser from 'cookie-parser';
import dotenv from 'dotenv';
import helmet from 'helmet'; //악성 스크립트 보호
import HTTPS from 'https';
import fs from 'fs';
import hpp from 'hpp'
import indexRouter from './src/api/routes/index';
import createData from './src/database/data';
import {errorLogger, errorHandler} from './src/middlewares/errorhandler';
import { sequelize } from './src/database/models/sequlize';

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

app.set('port', prod ? process.env.PORT : 3000);
app.use(helmet())
app.use(hpp())

// app.use(
//   cors({
//     origin: "*",
//     methods: "GET,POST,PUT,DELETE,PATCH",
//     credentials: true,
//   })
//   );
  
const whitelist = [
  "http://localhost:3000",
  process.env.Client_1,
  undefined
]
const corsOptions = {
  origin: function (origin:any, callback:any) {
    if (whitelist.indexOf(origin) !== -1) {
      // 만일 whitelist 배열에 origin인자가 있을 경우
      callback(null, true); // cors 허용
    } else {
      callback(new Error("Not Allowed Origin!")); // cors 비허용
    }
  },
  methods: "GET,POST,PUT,DELETE,PATCH",
  credentials: true,
};
  
app.use(cors(corsOptions)) //옵션 추가한 cors 미들웨어 추가
app.use(express.json());
app.use(cookieParser());

app.use('/', indexRouter);
//에러발생시 logger로 넘어옴
app.use(errorLogger);
//에러발생시 Handler로 이동
app.use(errorHandler);

if (prod) {
  try {
    const options = {
      ca: fs.readFileSync(`${process.env.CA}`),
      key: fs.readFileSync(`${process.env.KEY}`),
      cert: fs.readFileSync(`${process.env.CERT}`),
    };
    HTTPS.createServer(options, app).listen(app.get('port'), async () => {
      console.log('https 서버가 실행되었습니다. 포트 :: ' + app.get('port'));
      createData();
      await sequelize
        .authenticate()
        .then(async () => {
          console.log('DB 연결완료');
        })
        .catch((err) => {
          console.log(err);
          console.log('DB 연결실패');
        });
    });
  } catch (err) {
    console.log('HTTPS 서버가 실행되지 않습니다.');
    console.log(err);
  }
} else {
  app.listen(app.get('port'), async () => {
    console.log('HTTPS 서버가 실행되지 않습니다.');
    console.log(`${app.get('port')}로 실행중`);
    createData();
    await sequelize
      .authenticate()
      .then(async () => {
        console.log('DB 연결완료');
      })
      .catch((err) => {
        console.log(err);
        console.log('DB 연결실패');
      });
  });
}

수정한 이유는 백앤드 api를 호출 할 수 있는 출처를 *로 해놔서 다른곳에서도 api를 콜 하면 동작하기 떄문에

보안이 좋지 않아 whitelist를 만들어서 허용하는 도메인 주소만  요청 할 수 있게 바꾸었다.

 

'항해 99' 카테고리의 다른 글

항해 99 83일차 12/10일  (0) 2022.12.10
항해 99 82일차 12/09일  (0) 2022.12.10
항해 99 79일차 12/06일  (0) 2022.12.07
항해 99 78일차 12/05일  (0) 2022.12.06
항해 99 77일차 12/04일  (0) 2022.12.05