기존 내 프로젝트를 모듈화 하는 과정을 간단히 설명. 예시로 auth 라는 이름의 라우터를 재가공한다. 모듈화에 집중한 포스트이다보니, 각 파일별로 노출되는 함수가 다를 수 있음에 유의한다.
const routers = require("./routers");
//기존에 router가 많던 코드를 치환
app.use(routers);
const express = require("express");
const router = express.Router();
const authRouter = require("./auth");
router.use("/auth", [authRouter]);
module.exports = router;
const express = require("express");
const router = express.Router(); // 라우터라고 선언한다.
const passport = require("passport");
const { authController } = require("../controllers");
router.get("/fail", async (req, res, next) => {
res.status(400).send({ message: "login failed" });
});
router.post("/email", authController.email);
router.post("/email/check", authController.emailCheck);
router.post("/find-id", authController.findId);
router.post("/find-pw", authController.findPw);
router.post("/update-pw", authController.updatePw);
module.exports = router;
const authController = require("./authController");
module.exports = {
authController,
};
const jwt = require("jsonwebtoken");
const { authService } = require("../services");
const logIn = async (req, res, next) => {
try {
const user = req.user;
//로그인 부분 생략
res.status(200).send({ message: "success", token: token });
} catch (err) {
res.status(400).send({ message: err + " : login failed" });
}
};
const findId = async (req, res) => {
const { school_email } = req.body;
const result = await authService.findUser({ school_email });
if (result) {
res.status(200).send({ result, ok: true });
return;
}
res.status(403).send({ result: "no user", ok: false });
};
const findPw = async (req, res) => {
try {
const { email } = req.body;
const isExist = await authService.findUser({ email });
if (isExist) {
//인증코드 발급 부분 생략
res.status(200).send({ authCode });
} else {
res.status(403).send({ result: "no user", ok: false });
}
} catch (error) {
res.status(400).send({
ok: false,
message: error + "email 전송 실패!",
});
}
};
const updatePw = async (req, res) => {
const { email, password } = req.body;
const result = await authService.findUser({ email });
// 유저 데이터 재가공 부분 생략
};
module.exports = {
logIn,
findId,
findPw,
updatePw,
};
const authService = require("./authService");
module.exports = {
authService,
};
const { university, user } = require("../models");
const Sequelize = require("sequelize");
const Op = Sequelize.Op;
const findUnivByEmail = async (school_domain) => {
return await university.findOne({
where: {
email_domain: {
[Op.like]: "%" + school_domain,
},
},
});
};
const findUser = async (field) => {
return await user.findOne({
where: field,
});
};
const updateUserByUserId = async (fields, user_id) => {
await user.update(fields, {
where: { user_id },
});
return true;
};
module.exports = {
findUnivByEmail,
findUser,
updateUserByUserId,
};