이번엔 라우팅의 개념을 학습하고 refresh 도구인 nodemon을 설치하여 적용해보았다.
이전에 만들어 두었던 API를 Rest-API로 만들어본 뒤 express로 실행해 보았다. 또한, Swagger를 활용해 API-Docs를 제작했다.
코드캠프 동안 Nest.js와 GraphQL-API를 주로 사용하여 프로젝트를 진행해서 Node와 Rest-API는 확실히 익숙치가 않다.
코드를 수정할때마다 서버를 종료하고 다시 시작하기를 반복하는 문제점을 해결해주는 도구.
📌 설치 방법
yarn add nodemon
package.json
파일에 scripts
작성 "scripts": {
"dev": "nodemon index.js"
},
yarn dev
로 서버 실행라우팅은 URI(또는 경로) 및 특정한 HTTP 요청 메소드(GET, POST 등)인 특정 엔드포인트에 대한 클라이언트 요청에 애플리케이션이 응답하는 방법을 결정하는 것을 말함.
라우팅의 기본 문법
app.METHOD(PATH, HANDLER)
1. 홈페이지에서 'Hello World!'로 응답
app.get('/', function (req, res) {
res.send('Hello World!');
});
2. 애플리케이션의 홈 페이지인 루트 라우트(/)에서 POST 요청에 응답
app.post('/', function (req, res) {
res.send('Got a POST request');
});
설치방법 :
yarn add swagger-ui-express swagger-jsdoc
Swagger 문법 :
boards.swagger.js에 따로 작성
/**
* @swagger
* /boards:
* get:
* summary: 게시글 가져오기
* tags: [Board]
* parameters:
* - in: query
* name: number
* type: int
* responses:
* 200:
* description: 성공
* content:
* application/json:
* schema:
* type: array
* items:
* properties:
* number:
* type: int
* example: 3
* writer:
* type: string
* example: 철수
* title:
* type: string
* example: 제목입니다~~~
* contents:
* type: string
* example: 내용입니다!!!
*/
/**
* @swagger
* /boards:
* post:
* summary: 게시글 등록하기
* tags: [Board]
* responses:
* 200:
* description: 성공
*/
Swagger API문서를 만들어주는 문법
config.js에 따로 작성
export const options = {
definition: {
openapi: "3.0.0",
info: {
title: "mini-poject-API-Docs",
version: "1.0.0",
},
},
apis: ["./swagger/*.swagger.js"], // files containing annotations as above
};
Swagger UI를 사용하기 위한 문법
index.js에 따로 추가
import swaggerUi from 'swagger-ui-express'
import swaggerJSDoc from 'swagger-jsdoc'
import { options } from './swagger/config.js'
...
app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerJSDoc(options)));
// index.js
import express from "express";
import {
checkValidationPhoneNumber,
getToken,
sendTokenToSMS,
} from "./phone.js";
import swaggerUi from "swagger-ui-express";
import swaggerJSDoc from "swagger-jsdoc";
import { options } from "./swagger/config.js";
const app = express();
app.use(express.json()); // express는 기본적으로 JSON을 읽지 못하므로 JSON을 읽을 수 있게 만들어주는 문법
app.use("/api-docs", swaggerUi.serve, swaggerUi.setup(swaggerJSDoc(options))); // swagger UI를 사용하기 위한 문법
app.post("/tokens/phone", (req, res) => {
const myPhone = req.body.myPhone;
// 1. 휴대폰 번호 자릿수 확인
const isValid = checkValidationPhoneNumber(myPhone);
if (isValid === true) {
// 2. 핸드폰 토큰 6자리 만들기
const myToken = getToken();
// 3. 핸드폰 번호에 토큰 전송
sendTokenToSMS(myPhone, myToken);
res.send("인증 완료");
}
});
app.listen(3000, () => {
console.log(`Example app listening on port ${3000}`);
});
// phone.js
export function checkValidationPhoneNumber(phoneNumber) {
if (phoneNumber.length !== 10 && phoneNumber.length !== 11) {
console.log("Error, 핸드폰 번호를 정확히 입력해주세요.");
return false;
} else {
return true;
}
// if문을 활용한 에러핸들링 추가(phoneNumber)
}
export function getToken() {
const count = 6;
if (count === undefined) {
console.log("Error, count의 값을 입력해주세요.");
return;
} else if (count <= 0) {
console.log("Error, count의 값이 너무 작습니다.");
return;
} else if (count > 10) {
console.log("Error, count의 값이 너무 큽니다.");
return;
}
// if문을 활용한 에러핸들링 추가(count)
const Token = String(Math.floor(Math.random() * 10 ** count)).padStart(
count,
"0"
);
return Token;
}
export function sendTokenToSMS(phoneNumber, Token) {
console.log(`${phoneNumber}번호로 인증번호 ${Token}이 전송되었습니다.`);
}