TIL | Prisma & Express - 회원가입 API 만들기

Wook·2021년 12월 23일
0

TIL | Backend

목록 보기
13/19

회원가입


const http = require('http')
const express = require('express')
const { PrismaClient } = require('@prisma/client')

const prisma = new PrismaClient() 

const app = express()
app.use(express.json()) // for parsing application/json

app.post('/users/signup', async (req, res) => { // 1
  try { // 2
    const { email, name } = dreq.boy // 3

    console.log('email: ', email, 'name: ', name)

    const createdUser = await prisma.$queryRaw`
      INSERT INTO users(email, password) VALUES (${email}, ${password});
    ` // 4

    return res.status(201).json({ message: "CREATED" }) // 5
  } catch (err) { // 2
    console.log(err)
    return res.status(500).json({ message: err.message }) // 6
  }
})

const server = http.createServer(app) // express app 으로 서버를 만듭니다.

const start = async () => { // 서버를 시작하는 함수입니다.
  try {
    server.listen(8000, () => console.log(`Server is listening on 8000`))
  } catch (err) { 
    console.error(err)
    await prisma.$disconnect() // 에러가 발생했을 시에 database 연결을 종료합니다.
  }
}

start()

코드 설명


주석에 넘버링 되어있는 순서대로 코드를 설명하겠습니다.

1. '/users/signup' 엔드포인트에 핸들링 하는 함수 붙이기

  • app.post 메소드에 첫번째 인자에는 routing 할 엔드포인트가 들어갑니다.
  • 두번째 인자에는 위의 코드에서 볼 수 있듯이 콜백함수가 들어갑니다. 이 콜백함수가 async 로 선언된 이유는 밑에서 비동기를 → 동기적으로 처리하기 위해 필요한 await 예약어를 사용하기 위함입니다.

2. try / catch 문

  • 유저의 요청이 들어와서 실행 할 함수에서 어떤 일(에러)가 일어날지 모릅니다.
    따라서, 예외처리는 필수 입니다.
  • try / catch 문은 이 함수 내 로직의 모든 부분에서 일어난 에러를 catch 문으로 잡아낼 수 있습니다.
    즉, 실행컨텍스트(콜 스택) 안에 있는 어느 곳에서 에러가 난다고 해도 에러를 핸들링 할 수 있습니다.
  • 이 catch 문이 없으면(에러를 핸들링 하지 않으면) 에러가 나는 순간 서버는 종료됩니다.

3. 구조분해 할당

  • http request 객체의 body 에서 클라이언트가 post 메소드에 담아 보낸 key 값들을 구조분해할당 할 수 있습니다.

4. 데이터베이스 접근

드디어 데이터베이스 생성 → 마이그레이션 → Prisma client 생성 까지의 과정을 거친 후 마주하는 데이터 베이스에 접근하는 코드입니다.

  • prisma.users.create 로 유저테이블에 새로운 데이터를 생성 합니다. (하지만 SQL문을 적용하였습니다.)
  • data 객체는 우리가 생성한 테이블 스키마의 컬럼값을 키값으로 가집니다.
  • 유저의 정보를 생성하기 때문에 email 과 암호화된 패스워드를 값으로 넣어 줍니다.

5. Response 객체 사용해서 응답 전송

위의 과정에서 어떠한 에러도 발생하지 않으면 response 객체를 사용해서 다시 클라이언트에게 응답을 돌려줍니다.

  • 새로운 데이터를 생성했으므로 201 상태코드를 보냅니다.
  • 새롭게 생성된 유저의 id와 email 정보를 객체에 담아 보냅니다.
    (이렇게 응답으로 보내지는 데이는 상황에 따라 언제든지 바뀔 수 있습니다.)

6. 에러 핸들링

try 문 안에 있는 로직에서 에러가 발생했을 경우 500(internal server error) 상태코드와 함께 에러메시지를 response 로 보냅니다. (실제 서비스를 개발할 경우 이 메세지는 다양하게 바뀔 수 있습니다.)

profile
지속적으로 성장하고 발전하는 진취적인 태도를 가진 개발자의 삶을 추구합니다.

0개의 댓글