Backend - Express: 커스텀 미들웨어

BigbrotherShin·2020년 4월 1일
1

Backend

목록 보기
8/15
post-thumbnail

출처: Express 앱에서 사용하기 위한 미들웨어 작성

backend/routes/middleware.js

const db = require('../models');

exports.findPost = async (req, res, next) => {
  try {
    const post = await db.Post.findOne({
      where: {
        id: parseInt(req.params.id, 10),
      },
      include: [
        {
          model: db.Post,
          as: 'Retweet',
        },
      ],
    });
    if (!post) {
      return res.status(404).send('포스트를 찾지 못했습니다.');
    }
    req.findPost = post; // router에서 req.findPost를 사용할 수 있다.
    next();
  } catch (e) {
    console.error(e);
    next(e);
  }
};

next() 전에 req.findPost = post를 해줌으로서 다른 미들웨어나 router에서 req.findPost를 사용할 수 있다.

backend/routes/post.js

const { findPost } = require('./middleware');

router.delete('/:id/like', findPost, async (req, res, next) => {
  try {
    await req.findPost.removeLiker(req.user.id); // req.findPost 사용 가능
    res.json({ userId: req.user.id });
  } catch (e) {
    console.error(e);
    next(e);
  }
});
profile
JavaScript, Node.js 그리고 React를 배우는

0개의 댓글