Skip to content

Backend Architecture

STak edited this page Nov 3, 2020 · 1 revision

Backend Architecture

route

  • front와 통신을 한다
  • 사용자 인증 등 공통된 작업들은 middleware를 사용한다.
//index.route.js
router.use('/users', validateAuth, usersRouter);

//validateAuth.js
module.exports = function(req, res, next) {
  if (!req.body.password || !req.body.username) {
    return res.status(400).json('improper datas');
  }
  next();
}
  • 요청에 맞게 controller를 불러온다.
router.get('/', accountController.getTransaction);
    
router.post('/', accountController.addTransaction);

controller

  • route에서 받아온 데이터를 추출 해서 서비스에 넘긴다
  • 받아온 데이터에 따라 status code와 json을 돌려준다.
    • 에러는 catch 로 잡아서 구분한다.
const login = async (req, res) => {
  try {
    const { username, password } = req.body
    const token = await authService.login({ username, password });
    return res.status(200).json(token);
  } catch (err) {
    const { message } = err;
    if (message === 'login failed') {
      return res.status(400).send();
    }
    return res.status(500).send();
  }

service

  • controller에서 받아온 데이터를 추가 작업이 필요하면 적용한다.
    • 추가 작업은 밑에 예제 처럼 JWTToken 부르는 작업 등...
  • 필요한 데이터가 있으면 모델에 요청한다.
  • 데이터에 따라 에러를 발생시킨다.
  async login({ username, password }) {
    const user = await userModel.checkUser({ username, password });

    if (user) {
      return JWTToken.createToken(username);
    }
    throw new Error("login failed");
  }

model

  • service에서 요청한 데이터를 db에서 가져온다.
  async checkUser({ username, password }) {
    return await User.findOne({
      where: { username, password },
    })
  },
Clone this wiki locally