내일배움캠프 스파르타 코딩클럽
이어서 코드작성에 들어가 보도록 하겠다.
< .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를 활용하기 위해 잘 작성해주었다. 이제 메인미들웨어는 능숙하게 잘작성할 수 있다.
다음에는 라우터와 에러 로그 인증인가 처리를 한 미들웨어를 작성해 보도록 하겠다.
'TIL' 카테고리의 다른 글
Nodejs 뉴스피드 프로젝트 팀과제 시작 (0) | 2024.06.03 |
---|---|
Nodejs 숙련 이력서 개인과제 완료(3) (1) | 2024.06.03 |
Nodejs 숙련 이력서 개인과제 완료(1) (0) | 2024.05.29 |
Nodejs 강의 숙련 게시판 프로젝트(8) 게시글 생성,조회 / 댓글 생성,조회 (0) | 2024.05.28 |
Nodejs 강의 숙련 게시판 프로젝트(7) winston, 에러핸들링 미들웨어 (0) | 2024.05.27 |