๐ก ํ์ฌ ํ๋ก์ ํธ๋ mvc ํจํด์ ์ ์ฉ ์ค์ธ๋ฐ ์ด๋ฒ์๋ ๊ทธ ์ค์์ controller ํํธ๋ฅผ ๊ตฌํํ ๋ถ๋ถ์ ๊ฐ๋จํ๊ฒ ์ ์ด ๋ณด๊ณ ์ ํ๋ค.
๊ธฐ์กด express๋ฅผ ์ฌ์ฉํด์ api ์๋ฒ๋ฅผ ๊ตฌํํ๋ฉด ํด๋ผ์ด์ธํธ ์ธก์์ ๋ค์ด์ค๋ ์์ฒญ์ ์๋์ ์ฝ๋์ ๊ฐ์ด request๋ฅผ ์์ ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ณ ๋ค์ ํด๋ผ์ด์ธํธ ์ธก์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ค.
const express = require('express')
const app = express()
// app.[METHOD]('request ๊ฒฝ๋ก', callback_function)
app.get('/', (req, res) => {
res.send('hello world')
})
ํ์ง๋ง ๊ธฐ์กด๊ณผ ๊ฐ์ด ์ธ์๋ก ์ ๋ฌํ๋ callback ํจ์์์ ๊ฐ ์์ฒญ๋ค์ ์ฒ๋ฆฌํ๋ ๋ก์ง์ ์ง์ ์ ์ผ๋ก ๊ตฌํํ๋ค ๋ณด๋ฉด ํ๋ก์ ํธ์ ๊ท๋ชจ๊ฐ ์ปค์ง์ ๋ฐ๋ผ ์๋ง์ ์์ฒญ๋ค์ ์ฒ๋ฆฌํ๊ฒ ๋๋ค.
๊ทธ ๊ณผ์ ์์ ํ๋์ js ํ์ผ์์ ๋ชจ๋ ์์ฒญ์ ๋ํด ๋ก์ง์ ๊ตฌํํ๊ฒ ๋๋๋ฐ ๊ทธ๋ฌ๋ค ๋ณด๋ฉด ๋น์ฐํ ์ฝ๋์ ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง๊ณ ์ฝ๋๊ฐ ์ค๋ณต๋๊ฒ ๋๋ฉด์ ํ๋ก์ ํธ์ ์ ์ง๋ณด์๊ฐ ๋จ์ด์ง๋ค.
๊ทธ ์ ์ express์์ ์ ๊ณตํ๋ Router ๋ชจ๋์ ์ฌ์ฉํด ๊ณตํต๋ ๊ฒฝ๋ก๋ฅผ ๋ชจ์์ ๋ผ์ฐํ ์ ๊น๋ํ๊ฒ ๊ด๋ฆฌํ ์ ์๋ค.
โ โ๋ผ์ฐํธ ์ฒด์ด๋โ ์ด๋ผ๊ณ ๋ถ๋ฅด๋ ๊ฑฐ ๊ฐ๋ค
๊ฐ๋จํ๊ฒ Router์ ๋ํด ์์๋ณด๊ธฐ ์ํด src ๋๋ ํ ๋ฆฌ ์๋์ routes๋ฅผ ์์ฑํ๋ค.
๊ทธ๋ฆฌ๊ณ ์๋์ ๊ฐ์ด users.js ํ์ผ์ ์ฝ๋๋ฅผ ์์ฑํ์.
(์ ์ฒด ์ฝ๋๋ ๊นํ๋ธ๋ฅผ ์ฐธ๊ณ ํ์)
var express = require("express");
var router = express.Router();
// ๋ก์ง์ ์ฒ๋ฆฌํ ์ปจํธ๋กค๋ฌ
const userController = require("../controllers/userController")
router.get("/emailCheck/:email", userController.checkEmailExistence);
module.exports = router;
app.use("/users", usersRouter);
๊ทธ๋ฆฌ๊ณ ๋๋ router์ controller๋ฅผ ๋ถ๋ฆฌํด์ router๋ ๊ฒฝ๋ก๋ฅผ ๋ผ์ฐํ ํ๋ ์ฉ๋๋ก๋ง ์ฌ์ฉํ๊ณ ์ ํ๋ค.
(Django์ urls.py๋ฅผ ์ด์ฉํ ๋ผ์ฐํ ๋ฐฉ์๊ณผ ์ ์ฌโฆ?)
์์ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑ์ ํ์ผ๋ฉด ๋ง์ฝ โGET /emailChecl/[query parameter]โ ๊ฒฝ๋ก๋ก ์๋ฒ์ ์์ฒญ์ด ์ค๋ฉด router๋ ์์ฒญ์ ๋ฐ์ userController๋ก requset์ ์ ๋ฌํ๋ค.
์ด์ ํด๋ผ์ด์ธํธ์์ ๋ค์ด์จ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ ๋ฐํํ๋ ๋ก์ง์ ๊ตฌํํด์ผ ํ๋๋ฐ ๋ฐ๋ก mvc design pattern์ controller๋ฅผ ๊ตฌํํ๋ฉด ๋๋ค!!
๋ผ์ฐํฐ๋ ๊ณตํต๋ ๊ฒฝ๋ก(๊ธฐ๋ฅ)๋ก ๋ฌถ์ด์ ๊ตฌํํ ๋ฏ์ด ์ปจํธ๋กค๋ฌ๋ฅผ ๊ณตํต๋ ๊ธฐ๋ฅ์ด๋ ๋ชฉ์ ์ ๊ฐ์ง ์ปจํธ๋กค๋ฌ๋ค์ ํฉ์ณ์ ํ๋์ ๋ชจ๋๋ก ๊ตฌํํด๋ณด๊ฒ ๋ค.
โ ์ผ๋จ Router : Controller = 1: 1 ๋งค์นญ์ด ๋๊ฒ๋โฆ
์์ ๊ทธ๋ฆผ์ฒ๋ผ controllers ๋๋ ํ ๋ฆฌ๋ฅผ ์์ฑํ๊ณ ๊ทธ ์๋์ ์ฌ์ฉ์ ๊ด๋ จ ๊ธฐ๋ฅ์ ๋ด๋นํ userController.js ํ์ผ์ ์์ฑํ๋ค. ๊ทธ๋ฆฌ๊ณ ์๋์ ๊ฐ์ด ์ฝ๋๋ฅผ ์ถ๊ฐํด๋ณด์.
const db = require("../models");
// ์ด๋ฉ์ผ ์ฒดํฌ ์ปจํธ๋กค๋ฌ
exports.checkEmailExistence = async (req, res) => {
const emailToCheck = req.params.email;
db.Worker.findOne({ where: { email: emailToCheck } })
.then((user) => {
res.status(200);
if (user) {
res.json({ message: "EMAIL_ALREADY_EXISTS" });
} else {
res.json({ message: "EMAIL_AVAILABLE" });
}
})
.catch((err) => {
console.log(err.message);
res.status(500).json({ message: "EAMIL_CHECKING_FAILED" });
});
};
checkEmailExistence controller๋ฅผ ๊ฐ๋จํ๊ฒ ์ค๋ช ํ๋ฉด ํ์๊ฐ์ ๊ณผ์ ์์ ์ด๋ฉ์ผ์ด ์ฌ์ฉํ ์ ์๋ ์ด๋ฉ์ผ์ธ์ง ์กฐํํ๋ ๋ก์ง์ ๊ตฌํํ ์ฝ๋์ด๋ค.
model ๊ฐ์ฒด๋ฅผ ํตํด ํด๋ผ์ด์ธํธ์์ ์์ฒญ์ผ๋ก ๋ฐ์ email ๊ฐ์ด user table์ ์กด์ฌํ๋์ง ํ์ธํ๋ค.
โ ํ์ฌ๋ database๋ฅผ ORM์ ํตํด CRUD๋ฅผ ํ๊ธฐ ์ํด sequelize์ ์ฐ๋์ ํ ์ํ
๐ก ๊ทธ๋ฆฌ๊ณ ๊ฐ์ธ์ ์ธ ๋ฐ๋์ผ๋ก ์ต๋ํ **REST full api**๋ฅผ ๊ตฌํํ๋ ๊ฒ์ ๋ชฉํ๋ก ๊ฐ์ง๊ณ ์์ด ์ํ ์ฝ๋๋ return message ๋ฑ์ ์ ๊ทน์ ์ผ๋ก ํ์ฉํ ์์ ์ด๋ค.
์ข์ ๊ธ์ด๋ค์. ๊ณต์ ํด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.