728x90
※ postman으로 실행하세요
insomnia는 포트3000으로 열은 서버의 로컬 호스트가 아니라 파일 위치 찾습니다.....
json파일로 챔피언 테이블에 데이터 채우기
데이터를 데이터베이스에 삽입하고 가져오는 REST API를 구현합니다.
주요 문법 및 설치해야 할 라이브러리를 정리해 보겠습니다.
json으로 테이블 채우기 API
더보기
// ./src/routes/champions.router.js
import express from 'express';
import { prisma } from '../utils/prisma/index.js';
import fs from 'fs/promises';
import path from 'path';
import { fileURLToPath } from 'url';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const router = express.Router();
// POST /api/update_champion_list - 테이블 초기화 후 JSON 파일의 데이터 삽입
router.post('/update_champion_list', async (req, res) => {
try {
console.log('지나가는가2');
const filePath = path.resolve(__dirname, '../accet/champion_data.json');
console.log(filePath);
const data = await fs.readFile(filePath, 'utf-8');
console.log('지나가는가3');
// JSON 파일 읽기
const champions = JSON.parse(data);
// 테이블 초기화 (기존 데이터 삭제)
await prisma.champions.deleteMany();
console.log('테이블 초기화');
/*
// 챔피언 정보를 저장하는 테이블
model Champions {
championId Int @id @default(autoincrement()) // 챔피언 ID, 자동 증가
image String @unique // 챔피언 이미지 URL, 고유 값
name String @unique // 챔피언 이름, 고유 값
}
*/
console.log('지나가는가4');
// JSON 데이터 삽입
const createdChampions = await prisma.champions.createMany({
data: champions.map((champion) => ({
image: champion.image,
name: champion.name,
})),
skipDuplicates: true, // 중복 데이터 무시
});
res.status(201).json({
message: `Champions table 에 데이터 채우기 완료. ${createdChampions.count}명.`,
});
} catch (error) {
console.error('Error updating champion list:', error);
res.status(500).json({ error: '업데이트 실패' });
}
});
// GET /api/champions - 챔피언 테이블 전체 조회
router.get('/champions', async (req, res) => {
try {
const champions = await prisma.champions.findMany();
res.status(200).json(champions);
} catch (error) {
console.error('Error fetching champions:', error);
res.status(500).json({ error: 'Failed to fetch champions.' });
}
});
export default router;
1. 주요 문법
- import 문법:
- ECMAScript Module(ESM) 방식을 사용하여 모듈을 가져옵니다.
- import express from 'express'는 Express를 가져오고, import { prisma } from '../utils/prisma/index.js'는 Prisma 클라이언트를 가져옵니다.
- fs/promises: 파일 시스템 비동기 작업을 위한 Promise 기반 API입니다.
- path, fileURLToPath: 파일 및 디렉터리 경로를 다루기 위한 기본 Node.js 모듈입니다.
- async/await:
- 비동기 작업을 처리할 때 사용합니다. 예를 들어, await fs.readFile로 파일을 읽고, await prisma.champions.createMany로 데이터를 삽입합니다.
- Router:
- express.Router()를 사용해 라우팅 논리를 캡슐화합니다.
- POST와 GET 요청을 각각 처리합니다.
- path.resolve:
- 파일 경로를 절대 경로로 변환합니다.
- __dirname은 현재 파일의 디렉터리 경로를 나타냅니다.
- Prisma 사용:
- Prisma는 ORM(객체 관계 매핑) 도구로, 데이터베이스와의 상호작용을 간소화합니다.
- 예제에서는 prisma.champions.createMany, prisma.champions.deleteMany, prisma.champions.findMany가 사용되었습니다.
2. 설치해야 할 라이브러리
필수 라이브러리
- Express:
- 설치:
npm install express # 또는 yarn add express
- 설치:
- Prisma:
- 설치:
npm install prisma --save-dev npm install @prisma/client # 또는 yarn add prisma --dev yarn add @prisma/client
- Prisma 초기화 후, schema.prisma 파일을 설정하고 npx prisma generate를 실행하여 클라이언트를 생성합니다.
- 설치:
- fs/promises:
- 기본 제공 모듈이므로 별도 설치가 필요 없습니다.
- Path 및 URL 모듈:
- 기본 제공 모듈입니다. 별도 설치가 필요 없습니다.
3. Prisma 테이블 정의
Prisma Schema 파일(schema.prisma)에서 테이블은 다음과 같이 정의됩니다:
model Champions {
championId Int @id @default(autoincrement()) // 챔피언 ID
image String @unique // 챔피언 이미지 URL
name String @unique // 챔피언 이름
}
Prisma 마이그레이션
Prisma 테이블을 생성하려면 다음 명령어를 실행하세요:
npx prisma migrate dev --name init
4. JSON 파일 경로 문제
- 코드에서 path.resolve(__dirname, '../accet/champion_data.json')는 accet 폴더를 찾습니다.
- 오타로 보이므로, 정확한 폴더 이름(assets?)으로 수정해야 합니다.
5. 전체 설치 명령 요약
npm install express @prisma/client
npm install --save-dev prisma
또는
yarn add express @prisma/client
yarn add prisma --dev
6. 추천 추가 설치
- nodemon: 개발 중 서버 자동 재시작또는
- yarn add --dev nodemon
- npm install --save-dev nodemon
- CORS: API 접근 제어또는
- yarn add cors
- npm install cors
- dotenv: 환경변수 관리또는
- yarn add dotenv
- npm install dotenv