Rest API의 핵심은 요청이 왔을 때 응답을 보내는 것이다.
- 회원가입 API
1. API 설계하기
(1) URI 엔드포인트와 HTTP 메소드를 정한다.
- 회원가입 API이므로 URI는 /user/register 또는 user/create 등으로 정할 수 있다.
- 회원가입은 사용자 정보를 처음 db에 저장하는 과정이므로 method를 POST로 한다.
(2) 요청으로 받을 데이터(json)과 응답으로 보낼 데이터를 정한다.
- 회원가입이므로, 사용자 이름, 이메일, 비밀번호 등을 받는다.
- 프론트에서는 사용자가 누구인지 식별해야하므로, id를 내보낸다.
- id와 같이 프론트에서 사용할만한 데이터들은 내보내준다.
(3) Mongoose Schema를 만든다.
- 반환할 json 데이터를 바탕으로 스키마를 만든다.
- 다음과 같이 만들 수 있다.
const UserSchema = new Schema(
{
id: {
type: String,
required: true,
},
email: {
type: String,
required: true,
},
name: {
type: String,
required: true,
},
password: {
type: String,
required: true,
},
description: {
type: String,
required: false,
default: "설명을 추가해주세요.",
},
},
{
timestamps: true,
}
)
2. 3계층 구조의 코드 작성하기
3계층 구조는 schema 파일을 제외하면, 다음 3개의 파일이 작성되면 된다.
1. roters 폴더 내에 있을 OOORouter.js
2. services 폴더 내에 있을 OOOService.js
3. db/models 폴더 내에 있을 OOOModel.js (혹은 폴더 이름에 Model이 있으므로 그냥 OOO.js)
(1) OOORouter.js 파일을 만든다.
req, res 표현이 쓰이는 곳이며, URI 엔드포인트와 HTTP 메소드도 이 곳에서 작성된다.
1. 에서 URI(/user/register), HTTP(POST)를 정했으므로, 아래와 같이 함수를 작성한다.
함수 내에서 비동기 처리가 필요하므로 async도 추가한다.
const userAuthRouter = express.Router()
userAuthRouter.post("/user/register" async function(req, res, next) {
...
}
라우터가 정의 됐으면, 이 라우터 층에서 사용할 서비스 층의 함수(메소드)를 정해야 한다.
서비스 이름은 라우터와 비슷하게 userAuthService라고 해보자.
(2) OOOService.js 파일을 만든다.
3계층 구조는 class를 활용한다. 아래와 같이 메소드를 만들 수 있다.
class userAuthService {
static async addUser({ name, email, password }) {
...
}
}
여기서 또 중요한 것은, 이 서비스 층에서 사용할 모델 층의 함수를 정해야 한다.
모델 이름은 User라고 해보자.
(3) OOOModel.js 파일을 만든다.
역시 class로 생성하고 이름을 User로 한다.
이 모델 층에서 Mongoose Model의 쿼리 함수 create, findOne 등이 사용된다.
class User {
static async create({ newUser }) {
...
}
}
***
1) URI 엔드포인트 및 HTTP 메소드 정하기
2) 받을 데이터 형태와 보낼 데이터 형태를 정하고, schema 만들기
3) Router 코드 작성
4) Service 코드 작성
5) Model 코드 작성
***
참고: 엘리스 AI트랙
'Backend > Node.js' 카테고리의 다른 글
Node.js - Nodemailer + Gmail 사용하여 비밀번호 찾기 구현 (0) | 2022.03.07 |
---|---|
Node.js - JWT 기본 (0) | 2022.03.07 |
Node.js - Async Request Handler (비동기 오류 처리) (0) | 2022.02.26 |
Node.js - Express.js와 MongoDB로 웹서비스 만들기 (0) | 2022.02.26 |
Node.js - Express.js와 REST API (2) (0) | 2022.02.20 |