Skip to content

[신진호] SPRINT6#10

Merged
rjc1704 merged 16 commits intocodeit-sprint-fullstack:express-신진호from
m-4verick:express-신진호-sprint6
Jan 27, 2025

Hidden character warning

The head ref may contain hidden characters: "express-\uc2e0\uc9c4\ud638-sprint6"
Merged

[신진호] SPRINT6#10
rjc1704 merged 16 commits intocodeit-sprint-fullstack:express-신진호from
m-4verick:express-신진호-sprint6

Conversation

@m-4verick
Copy link

백엔드 구현 요구사항
중고마켓

  • Product 스키마를 작성해 주세요.

  • id, name, description, price, tags, createdAt, updatedAt필드를 가집니다.

  • 필요한 필드가 있다면 자유롭게 추가해 주세요.

  • 상품 등록 API를 만들어 주세요.

  • name, description, price, tags를 입력하여 상품을 등록합니다.

  • 상품 상세 조회 API를 만들어 주세요.

  • id, name, description, price, tags, createdAt를 조회합니다.

  • 상품 수정 API를 만들어 주세요.

  • PATCH 메서드를 사용해 주세요.

  • 상품 삭제 API를 만들어 주세요.

  • 상품 목록 조회 API를 만들어 주세요.

  • id, name, price, createdAt를 조회합니다.

  • offset 방식의 페이지네이션 기능을 포함해 주세요.

  • 최신순(recent)으로 정렬할 수 있습니다.

  • name, description에 포함된 단어로 검색할 수 있습니다.

  • 각 API에 적절한 에러 처리를 해 주세요.

  • 각 API 응답에 적절한 상태 코드를 리턴하도록 해 주세요.

  • . env 파일에 환경 변수를 설정해 주세요.

  • CORS를 설정해 주세요.

  • render.com로 배포해 주세요.

  • MongoDB를 활용해 주세요.

링크
https://five-sprint-mission-be-3j7s.onrender.com

감사합니다.

@m-4verick m-4verick requested a review from rjc1704 January 23, 2025 13:05
@rjc1704
Copy link

rjc1704 commented Jan 27, 2025

모든 백엔드 요구사항들을 대체로 잘 만족시켜주셨습니다. 추가적으로 고려하면 좋을 코멘트들을 아래에 남겨 드리겠습니다.

  • 상품 수정 patch 시 req.body 에 대한 유효성검사가 결여되어있습니다. name, description, price, tags 중에 하나 이상이 넘어왔는 지, 넘어왔다면 각각의 타입이나 길이가 적절한 지 확인이 필요합니다.
  • 에러 처리를 위한 미들웨어를 app.js 에서 아래와 같이 작성해주셨는데 이 미들웨어는 현재 실행될 일이 없습니다. 각각의 router api handler 내에서 try/catch 의 catch에서 응답을 마무리하고 있기 때문입니다.
    app.use((err, req, res, next) => {
    console.error(err.stack);
    res.status(500).json({ error: '서버 내부 오류' });
    });
  • 에러 처리 미들웨어에서 최종적으로 에러응답을 마무리하고 싶다면, api error를 기존 Error 객체에서 커스텀해서 사용하고 router 의 컨트롤러 콜백함수는 asyncHandler 의 인자로 넣어주면 심플해집니다. asyncHandler 는 에러 발생 시 next(error) 코드를 실행시켜서 에러처리 미들웨어로 에러를 전달해줄 것이고, 발생한 에러객체 안에서 에러메시지와 statusCode가 함께 담겨있는 형태라 응답 시 어떤 router path에서 발생한 에러인지도 구분할 수 있게됩니다.
    export class ApiError extends Error {
    constructor(statusCode, message) {
    super(message);
    this.statusCode = statusCode;
    }
    }

const asyncHandler = (fn) => (req, res, next) => {
Promise.resolve(fn(req, res, next)).catch(next);
};

@rjc1704 rjc1704 merged commit d50222c into codeit-sprint-fullstack:express-신진호 Jan 27, 2025
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants