본문 바로가기
TIL

Nodejs 숙련 이력서 개인과제 완료(2)

by 황민도 2024. 5. 31.

내일배움캠프 스파르타 코딩클럽

이어서 코드작성에 들어가 보도록 하겠다.

 

< .gitignore >

# dotenv environment variable files
.env

# Dependency directories
node_modules/

 

< .prettierrc.json >

{
    "trailingComma": "es5",
    "tabWidth": 2,
    "semi": true,
    "singleQuote": true,
    "arrowParens": "always"
}

 

< package.json >

{
  "name": "mdstart-shop-resume",
  "version": "1.0.0",
  "main": "index.js",
  "license": "MIT",
  "type": "module",
  "scripts": {
    "dev": "nodemon src/app.js",
    "which": "which nodemon",
    "format": "prettier --write *.js **/*.js"
  },
  "dependencies": {
    "@prisma/client": "^5.14.0",
    "bcrypt": "^5.1.1",
    "cookie-parser": "^1.4.6",
    "dotenv": "^16.4.5",
    "express": "^4.19.2",
    "joi": "^17.13.1",
    "jsonwebtoken": "^9.0.2",
    "prisma": "^5.14.0",
    "winston": "^3.13.0"
  },
  "devDependencies": {
    "nodemon": "^3.1.1",
    "prettier": "^3.2.5"
  }
}

 

 

< schema.prisma >

// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema

// Looking for ways to speed up your queries, or scale easily with your serverless or edge functions?
// Try Prisma Accelerate: https://pris.ly/cli/accelerate-init

generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "mysql"
  url      = env("DATABASE_URL")
}

model Users {
  userId Int @id @default(autoincrement()) @map("userId")
  email String @unique @map("email")
  password String @map("password")
  name String @map("name")
  part String @map("part")

  createdAt DateTime @default(now()) @map("createdAt")
  updatedAt DateTime @updatedAt @map("updatedAt")

  Resumes Resumes[]

  @@map("Users")
}

model Resumes {
  resumeId Int @id @default(autoincrement()) @map("resumeId")
  UserId Int @map("UserId")

  title String @map("title")
  introduce String @db.Text @map("introduce")
  state String @map("state")

  createdAt DateTime @default(now()) @map("createdAt")
  updatedAt DateTime @updatedAt @map("updatedAt")

  User Users @relation(fields: [UserId], references: [userId], onDelete: Cascade)

  @@map("Resumes")
}

"DATABASE_URL" 은 .env 에 설정되어 있고 위와같이 불러왔다.

모델은 1:N관계 1은 회원 N은 이력서이다.

위와같이 프리즈마 스키마를 작성해주고

 

< index.js >

import { PrismaClient } from '@prisma/client';

export const prisma = new PrismaClient({
  // PrismaClient 인스턴스를 생성합니다.
  // Prisma를 이용해 데이터베이스를 접근할 때, SQL을 출력해줍니다.
  log: ['query', 'info', 'warn', 'error'],
  // query: Prisma가 실행하는 SQL 쿼리에 대한 정보를 출력합니다.
  // info: 정보에 관련된 로그를 출력합니다. 예를 들어 연결 상태 변경 등의 정보가 있을 수 있습니다.
  // warn: 경고에 관련된 로그를 출력합니다. 예상치 못한 상황이 발생할 수 있는 경우에 사용됩니다.
  // error: 오류에 관련된 로그를 출력합니다. 프로그램 실행 중 오류가 발생한 경우에 사용됩니다.

  // 에러 메시지를 평문이 아닌, 개발자가 읽기 쉬운 형태로 출력해줍니다.
  errorFormat: 'pretty',
});

 프리즈마 스키마가 코드에 잘 적용될수 있게끔

prisma/client 를 적용하여 위와같이 인스턴트를 생성하여주었다.   

 

 

< app.js >

import express from 'express';
import cookieParser from 'cookie-parser';
import logMiddleware from './middlewares/log.middleware.js';
import errorHandlerMiddleware from './middlewares/error-handler.middleware.js';
import UsersRouter from './routes/users.router.js';
import ResumesRouter from './routes/resumes.router.js';

const app = express();
const PORT = 3020;

app.use(logMiddleware);
app.use(express.json());
app.use(cookieParser());
app.use('/api', [UsersRouter, ResumesRouter]);
app.use(errorHandlerMiddleware);

app.listen(PORT, () => {
  console.log(PORT, '포트로 서버가 열렸어요!');
});

메인 미들웨어를 위와같이 express를 활용하기 위해 잘 작성해주었다. 이제 메인미들웨어는 능숙하게 잘작성할 수 있다. 

 

다음에는 라우터와 에러 로그 인증인가 처리를 한 미들웨어를 작성해 보도록 하겠다.