본문 바로가기
내일배움 정리/JS 문법 공부

json으로 테이블 채우기 API (경로찾아삼만리....)

by GREEN나무 2024. 12. 27.
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. 주요 문법

  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 모듈입니다.
  2. async/await:
    • 비동기 작업을 처리할 때 사용합니다. 예를 들어, await fs.readFile로 파일을 읽고, await prisma.champions.createMany로 데이터를 삽입합니다.
  3. Router:
    • express.Router()를 사용해 라우팅 논리를 캡슐화합니다.
    • POST와 GET 요청을 각각 처리합니다.
  4. path.resolve:
    • 파일 경로를 절대 경로로 변환합니다.
    • __dirname은 현재 파일의 디렉터리 경로를 나타냅니다.
  5. Prisma 사용:
    • Prisma는 ORM(객체 관계 매핑) 도구로, 데이터베이스와의 상호작용을 간소화합니다.
    • 예제에서는 prisma.champions.createMany, prisma.champions.deleteMany, prisma.champions.findMany가 사용되었습니다.

2. 설치해야 할 라이브러리

필수 라이브러리

  1. Express:
    • 설치:
      npm install express
      # 또는
      yarn add express
      
  2. Prisma:
    • 설치:
      npm install prisma --save-dev
      npm install @prisma/client
      # 또는
      yarn add prisma --dev
      yarn add @prisma/client
      
    • Prisma 초기화 후, schema.prisma 파일을 설정하고 npx prisma generate를 실행하여 클라이언트를 생성합니다.
  3. fs/promises:
    • 기본 제공 모듈이므로 별도 설치가 필요 없습니다.
  4. 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

 

'내일배움 정리 > JS 문법 공부' 카테고리의 다른 글

코드 접기 펴기  (0) 2024.12.31
HTML 데이터에 JavaScript로 데이터를 반영하는 방법 - TIL 241230  (0) 2024.12.30
숫자타입  (1) 2024.12.25
isNaN  (0) 2024.12.25
아스키코드 변환  (1) 2024.12.24