/**Prisma 시작하기
yarn init -y 프로젝트 초기화
yarn add express prisma(prisma를 터미널에서 가능하게 만듬.) @prisma/client (Node.js에서 prisma를 사용할수 있게함)
yarn add -D(DevDependency) nodemon(개발코드 변경시 서버 재시작 시켜줌)
npx prisma init(설치한 prisma 초기화, prisma 사용 할 수 있는 구조 생성)
npx prisma db push (schema.prisma 에서 생성된대로db에 push함. 내부적으로 prisma generate가 실행. 구조변경 혹은 생성)
prisma generate (prisma client 생성 및 업데이트. schema.prisma 가 변경되었을때, 최신사항 유지가능)
prisma db pull (현재 연결된 데이터베이스의 구조를 prisma.schema파일로 가져옴. 이후 prisma generate 사용시 변경사항을 반영 가능)
package.json에
"script" : {
"dev" : "nodemon app.js"
},
.env
DATABASE_URL="mysql(databaseEngine)://youngjun9310(who):aaaa4321(password)@youngjun93101.cbyei8g4u3zz.ap-southeast-2.rds.amazonaws.com(RDS_Endpoint):3306(port)/NodeJS(where)(그리고 추가옵션 Arguments)"
**/
/** Prisma model
model Products { Products 테이블
productId(어떻게 쓸것인지에 대한 이름) Int @id(primary key) @default(autoincrement())(여기가 디폴트) @map(""productId"")(테이블 내에서 실제로 가지게 될 컬럼)
productName String @unique(유니크) @map(""productName"")
price Int @default(1000) @map(""price"")
info String?(?는 NULL 가능) @map(""info"") @db.Text(text타입을 가지게됨.)
createdAt DateTime(시간타입) @default(now())(현재날짜) @map(""createdAt"")
updatedAt DateTime @updatedAt(현재시간 반영) @map(""updatedAt"")
@@map("Products")(대문자로 명확하게 표현하기 위해 Product를 정확하게 정의 안하면 소문자로 치환)
INTEGER = 숫자
}
대문자 제대로 안쓰면 실행이 안됨, 아니 안읽음. 확인 할 것.
**/
/** Prisma Method
import {PrismaClient} from "@prisma/client" 프리즈마클라이언트
export const prisma = new PrismaClient({ 외부로 함수 배출
Prisma를 이용해 데이터베이스를 접근할 때, SQL을 출력해줍니다.
log: ['query', 'info', 'warn', 'error'],
에러 메시지를 평문이 아닌, 개발자가 읽기 쉬운 형태로 출력해줍니다.
errorFormat: 'pretty',
}); PrismaClient 인스턴스를 생성합니다.
router.get('/posts', async (req, res, next) => {
const posts = await prisma.posts.findMany({ (findMany = 그냥 있는거 다 가져옴 findFirst = 첫번째만(하나만)가져옴 findUnique = 유니크한값을 가져옴.)
select :{
postId: true, true = 가져옴 false = 가져오지 않음
title: true,
createdAt : true,
updatedAt : true,
}
});
return res.status(200).json({data:posts});
});
**/