230901(금)

박지은·2023년 9월 1일
0

TIL

목록 보기
15/36

level1 과제를 하면서 오늘 혜훤님께 코드 중에서 중복해서 들어가는 코드 부분이 있어서 이 부분 기록 !

기존에 작성한 코드

/** 게시글 작성 API
 *  - 제목, 작성자명, 비밀번호, 작성 내용을 입력하기
 */
router.post('/posts', async (req, res, next) => {
  const { user, password, title, content, createdAt } = req.body;

  const posts = await Posts.find({ user }).exec();
  if (posts.length) {
    return res
      .status(400)
      .json({ message: '데이터 형식이 올바르지 않습니다.' });
  }

  const createdPosts = await Posts.create({
    user,
    password,
    title,
    content,
    createdAt,
  });

  await createdPosts.save();

  return res.status(201).json({ message: '게시글을 생성하였습니다.' });
});

routes/posts.js
기존 코드는 위와 같이 게시글 작성 API를 만들었는데, 여기서 잘못 작성한 부분이 있다.

  1. createdAt : 보통 데이터베이스 생성시간을 확인하기 위해서 만드는 건데, 이거는 클라이언트에서 직접 값을 지정하는게 아닌 서버에서 자동으로 생성되게 만들어야 한다.
    그래서 createdAt 값을 요청데이터 req.body에 포함시키지 않음
const { user, password, title, content} = req.body;
  1. Posts.create() 메서드를 사용하여 새 게시물을 생성하면 await createdPosts.save();를 따로 사용할 필요가 없다.
const createdPosts = await Posts.create({
  user,
  password,
  title,
  content,
});

이렇게 수정한 뒤

/** 게시글 작성 API
 *  - 제목, 작성자명, 비밀번호, 작성 내용을 입력하기
 */
router.post('/posts', async (req, res, next) => {
  const { user, password, title, content} = req.body;

  const posts = await Posts.find({ user }).exec();
  if (posts.length) {
    return res
      .status(400)
      .json({ message: '데이터 형식이 올바르지 않습니다.' });
  }

  const createdPosts = await Posts.create({
    user,
    password,
    title,
    content,
  });

  return res.status(201).json({ message: '게시글을 생성하였습니다.' });
});

이런식으로 코드를 좀 더 간결하고 필요 없는 부분은 제외해서 정리할 수 있었다.

참고로 schema는 이렇게 작성했다.

// /schemas/post.js (스키마 파일)
const postSchema = new mongoose.Schema({
  // ...
  createdAt: {
    type: Date,
    required: false,
    default: Date.now, // 클라이언트에서 값을 받지 않으면 기본적으로 현재 날짜로 설정
  },
});

export default mongoose.model('Posts', postSchema);

나는 createdAt을 스키마에서 default 속성을 사용해서 createdAt필드를 현재 날짜로 자동 설정해두었고

혜훤님의 코드는

// /schemas/post.js (스키마 파일)
createAt: {
    type: Date,
    default: Date.now(),
    required: false,
  },
});
//게시글 생성
router.post("/", async (req, res) => {
  //클라이언트에게 전달받은 데이터를 변수에 저장합니다.
  try {
    const validation = await createPostSchema.validateAsync(req.body);
    const { user, password, title, content } = validation;
    const post = new Post({ user, password, title, content });
    await post.save();
    return res.status(201).json({ message: "게시글을 생성하였습니다." });
  } catch (err) {
    return res
      .status(400)
      .json({ message: "데이터 형식이 올바르지 않습니다." });
  }
});

이렇게 작성해서 어떤 부분이 필요하고 다른지 비교가 가능하다.

오늘은 level1 페어리뷰를 하고 level2 과제를 위한 숙련주차 1주차 강의를 듣는 중!! 얼른 듣고 과제하고 싶다!

profile
성장하는뿅아리

0개의 댓글

관련 채용 정보