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개의 댓글