1 분 소요

backend 시작 ~ 🧑‍💻

Wecode의 서버, node로 위벅스 서버 만들기

사전작업.

  1. node -v , npm -v 버전정보 확인
  2. git init -y ( package.json 생성확인 )
  3. npm install express ( package.json dependencies에 생성되었는지 확인 - node5부터는 –save하지 않아도 dependency에 적용)
  4. npm install prisma –save-dev ( -dev란 개발자환경에서만 사용될때 )
  5. npm install @prisma/client
  6. npm install dotenv nodemon -D
  7. npx prisma init
  8. prisma폴더와 .evn파일 생성확인
  9. layered pattern 적용시키기위해 폴더 생성


webucksNode-1


여기까지 잘되었다면 이제 시작해봅시다.

server.js

import express from 'express';
import { PrismaClient } from '@prisma/client';
import routes from './pattern/routes';
import cookieParser from 'cookie-parser';
import cors from 'cors';

const prisma = new PrismaClient();
const PORT = 8060;
const app = express();

app.use(cors());
app.use(express.json()); //미들
app.use(cookieParser());
app.use(routes);

const start = async () => {
  try {
    app.listen(PORT, () => console.log(`Server is listening on ${PORT}`));
  } catch (err) {
    console.error(err);
    await prisma.$disconnect();
  }
};

start();

다른서버에서의 접속을 허용하기 위해 cors를 install 하였고

쿠키로 받은 값을 해석하기 위해 cookie-parser를 install 하였다.

use라는 것은 미들웨어로 사용하겠다는 뜻인데 모든 API 요청과 응답사이에는 미들웨어가 실행이 된다.

그렇기에 실행 순서가 중요하다.

첫번째, prisma로 mySQL과 연동하여 테이블 생성하기

schema.prisma

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

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

.env

DATABASE_URL="mysql://root:"qqqqwwweer"@localhost:3306/we_starbucks_2"
//"mysql://USERNAME:PASSWORD@localhost:3306/DATABASE_NAME"

위와같이 설정시 mySQL과 연동이 된다.


webucksNode-2


위 사진과 같이 테이블을 작성한 후 npx prisma migrate dev --name "작명"

mySQL에 테이블이 생성된다.

두번째, layered pattern을 활용하여 Dao단에서 테이블을 조작한다.

productDao.js

// coffee list에 추가하기
const createProducts = async (
  id,
  korean_name,
  english_name,
  drink_info,
  is_new,
  category_id
) => {
  await prisma.$queryRaw`
    INSERT INTO
      drinks
        (id,
        korean_name,
        english_name,
        drink_info,
        is_new,
        category_id)
    VALUES
      (${id},
      ${korean_name},
      ${english_name},
      ${drink_info},
      ${is_new},
      ${category_id});`;
  return;
};
// coffee english_name 변경하기
const updateProduct = async (id) => {
  await prisma.drinks.update({
    where: {
      id: +id,
    },
    data: {
      english_name: 'new_coffe',
    },
  });
  return;
};

queryRaw를 통해 mySQL의 명령어를 사용하여 테이블의 데이터를 조작하는 방법과

prisma의 가공된 메서드를 통해 테이블을 조작하는 방법이 있다.

세번째, router를 통해 controller단, middleWare을 실행시킨다.

productsRouter.js

import express from 'express';
import { productController } from '../controllers';
import { admin_authorization } from '../../middleWare/auth';
const router = express.Router();

router.get('/', admin_authorization, productController.getProduct);
router.post('/', admin_authorization, productController.createProduct);
router.put('/', admin_authorization, productController.updateProduct);
router.delete('/', admin_authorization, productController.deleteProduct);

router.post('/likes', productController.likeProduct);

export default router;

클라이언트의 요청에 맞게 CRUD를 적어준다.

업데이트: