미니 프로젝트 - twitter -1

Pien·2022년 9월 25일
0

project

목록 보기
1/5
post-thumbnail

명절 연휴간 일주일간 위코드의 커리큘럼이 비게 되었다.
다음주 부터 본격적으로 프로젝트에 돌입하기 전 미니 프로젝트 느낌으로 프론트엔드와 백엔드를 나누어 토이 프로젝트를 진행해 보았다.
자세한 코드와 API 엔드 포인트, 엔드포인트에 대한 기능은 아래 링크 참조
GitHub Link
POST MAN API

API 엔드 포인트, 기능

데이터 입력

데이터를 넣는 작업은 이전에 인스타그램 클론코딩을 하며 익숙한 작업 이었고, 에러 핸들링을 하는것에 집중 했다.

//Service
const postRetweet = async (user_id, tweet_id) => {
    const checkRetweet = await retweetDao.checkRetweet(tweet_id);
    if(!checkRetweet){
        const err = new Error('존재하지 않는 게시글입니다')
        err.statusCode = 409;
        throw err;
    }
    const getDataRetweet = await retweetDao.getDataRetweet(user_id, tweet_id);
    if(getDataRetweet) {
        const err = new Error ('이미 리트윗 된 글입니다');
        err.statusCode = 409;
        throw err;
    }
    return await retweetDao.postRetweet(user_id, tweet_id);
}

위 코드는 리트윗 요청에 대한 에러 핸들링을 서비스 레이어 에서 구현한 코드 이다.
리트윗 요청이 들어오면 DB에서 트윗을 추출한다. 추출된 값이 없는 경우, 에러를 생성하고, 트윗이 있을 경우, DB에서 리트윗 여부를 추출해, 데이터가 없을경우, 에러를 생성하고, 데이터가 없는 경우, 리트윗 요청을 성공한다.
두번째 조건의 경우, 리트윗 테이블이 Unique Key로 제한이 걸려 있지만, DB에 들어가기전 핸들링을 하는게 좋을거 같아서 추가 한 예외적 에러 핸들링이다.

사진 업로드

이번 프로젝트에서는 이미지 업로드도 구현해 보았는데 multer 모듈을 사용했다. multer 모듈은 클라이언트에게 폼데이터 형식으로 사진을 받아, 업로드 후 해당 주소에 대한 url을 반환해 준다.
이번 프로젝트는 로컬 환경에서 이미지 서버를 구현 했고, 다음 프로젝트는 AWS를 이용한 이미지 업로드를 해볼 예정이다.

const multer = require("multer");
const path = require("path")

const upload = multer({
    storage: multer.diskStorage({
        destination(req, file,done) {
            done(null, "uploads/");
        },
        filename(req, file, done) {
            const ext = path.extname(file.originalname);
            done(null, path.basename(file.originalname,ext) + "-" + Date.now() + ext );
        },
    }),
    limits: {fileSize: 5 * 1024 * 1024 },
});

module.exports = {
    upload
}

0개의 댓글