본문 바로가기

내일 배움 캠프/정예반 일지

정예반 숙제 20230629

728x90
배운 내용 구현하기

- 게시글 리스트
- 게시글 하나 호출
- 게시글 등록 
  - 유효성 검증

다음시간에 할 것 구현해 보기
- 게시글 수정
- 게시글 삭제
const express = require("express");
const app = express();
const port = 3000;

app.listen(port, () => {
  console.log(port, "포트로 서버가 열렸습니다");
});

const posts = [
  {
    id: 1,
    user: "Aidan Johnson",
    tittle:
      "eget tincidunt dui augue eu tellus. Phasellus elit pede, malesuada",
    contents:
      "mi eleifend egestas. Sed pharetra, felis eget varius ultrices, mauris ipsum porta elit, a feugiat tellus lorem eu metus. In lorem. Donec elementum, lorem ut aliquam iaculis, lacus pede sagittis augue, eu tempor erat neque non quam. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Aliquam fringilla cursus purus. Nullam scelerisque neque sed sem egestas blandit. Nam nulla magna, malesuada vel, convallis in, cursus et, eros. Proin ultrices. Duis volutpat",
    createdAt: "2022-10-20 8:39 ",
  },
  {
    id: 2,
    user: "Donna Haney",
    tittle:
      "amet metus. Aliquam erat volutpat. Nulla facilisis. Suspendisse commodo tincidunt",
    contents:
      "nunc risus varius orci, in consequat enim diam vel arcu. Curabitur ut odio vel est tempor bibendum. Donec felis orci, adipiscing non, luctus sit amet, faucibus ut, nulla. Cras eu tellus eu augue porttitor interdum. Sed auctor odio a purus. Duis elementum, dui quis accumsan convallis, ante lectus convallis est, vitae sodales nisi magna sed dui. Fusce aliquam, enim nec tempus scelerisque, lorem ipsum sodales purus, in molestie",
    createdAt: "2023-03-07 1:54 ",
  },
  {
    id: 3,
    user: "Myra Porter",
    tittle:
      "vitae, posuere at, velit. Cras lorem lorem, luctus ut, pellentesque",
    contents:
      "molestie dapibus ligula. Aliquam erat volutpat. Nulla dignissim. Maecenas ornare egestas ligula. Nullam feugiat placerat velit. Quisque varius. Nam porttitor scelerisque neque. Nullam nisl. Maecenas malesuada fringilla est. Mauris eu turpis. Nulla aliquet. Proin velit. Sed malesuada augue ut lacus. Nulla tincidunt, neque vitae semper egestas, urna justo faucibus lectus, a sollicitudin orci sem eget massa. Suspendisse eleifend. Cras sed leo. Cras vehicula aliquet libero. Integer in magna. Phasellus dolor elit, pellentesque a, facilisis non, bibendum sed, est. Nunc laoreet lectus quis massa. Mauris vestibulum, neque sed dictum eleifend, nunc risus varius",
    createdAt: "2022-11-29 11:44 ",
  },
  {
    id: 4,
    user: "Genevieve Cooper",
    tittle: "nibh lacinia orci, consectetuer euismod est arcu ac orci. Ut",
    contents:
      "ac turpis egestas. Fusce aliquet magna a neque. Nullam ut nisi a odio semper cursus. Integer mollis. Integer tincidunt aliquam arcu. Aliquam ultrices iaculis odio. Nam interdum enim non nisi. Aenean eget metus. In nec orci. Donec nibh. Quisque nonummy ipsum non arcu. Vivamus sit amet risus. Donec egestas. Aliquam nec enim. Nunc ut erat. Sed nunc est, mollis non, cursus non, egestas a, dui. Cras pellentesque. Sed dictum. Proin eget odio. Aliquam vulputate ullamcorper magna. Sed eu eros. Nam consequat dolor vitae dolor. Donec fringilla. Donec feugiat metus sit amet ante. Vivamus",
    createdAt: "2023-03-04 3:50 ",
  },
  {
    id: 5,
    user: "Dominic Kidd",
    tittle: "a, arcu. Sed et libero. Proin mi. Aliquam gravida mauris",
    contents:
      "ornare egestas ligula. Nullam feugiat placerat velit. Quisque varius. Nam porttitor scelerisque neque. Nullam nisl. Maecenas malesuada fringilla est. Mauris eu turpis. Nulla aliquet. Proin velit. Sed malesuada augue ut lacus. Nulla tincidunt, neque vitae semper egestas, urna justo faucibus lectus, a sollicitudin orci sem eget massa. Suspendisse eleifend. Cras sed leo. Cras vehicula aliquet libero. Integer in magna. Phasellus dolor elit, pellentesque a, facilisis non, bibendum",
    createdAt: "2022-08-17 9:04 ",
  },
  {
    id: 6,
    user: "Yael Livingston",
    tittle: "amet diam eu dolor egestas rhoncus. Proin nisl sem, consequat",
    contents:
      "iaculis odio. Nam interdum enim non nisi. Aenean eget metus. In nec orci. Donec nibh. Quisque nonummy ipsum non arcu. Vivamus sit amet risus. Donec egestas. Aliquam nec enim. Nunc ut erat. Sed nunc est, mollis non, cursus non, egestas a, dui. Cras pellentesque. Sed dictum. Proin eget odio. Aliquam vulputate ullamcorper magna. Sed eu eros. Nam",
    date: "2023-05-30 6:46 AM",
  },
  {
    id: 7,
    user: "Tyrone Greene",
    tittle: "at pretium aliquet, metus urna convallis erat, eget tincidunt dui",
    contents:
      "risus. Quisque libero lacus, varius et, euismod et, commodo at, libero. Morbi accumsan laoreet ipsum. Curabitur consequat, lectus sit amet luctus vulputate, nisi sem semper erat, in consectetuer ipsum nunc id enim. Curabitur massa. Vestibulum accumsan neque et nunc. Quisque ornare tortor at risus. Nunc ac sem ut dolor dapibus gravida. Aliquam tincidunt, nunc ac mattis ornare, lectus ante dictum mi, ac mattis velit justo",
    date: "2023-04-12 4:16 PM",
  },
  {
    id: 8,
    user: "Holmes Browning",
    tittle:
      "vel pede blandit congue. In scelerisque scelerisque dui. Suspendisse ac",
    contents:
      "Suspendisse ac metus vitae velit egestas lacinia. Sed congue, elit sed consequat auctor, nunc nulla vulputate dui, nec tempus mauris erat eget ipsum. Suspendisse sagittis. Nullam vitae diam. Proin dolor. Nulla semper tellus id nunc interdum feugiat. Sed nec metus facilisis lorem tristique aliquet. Phasellus fermentum convallis ligula. Donec luctus aliquet odio. Etiam ligula tortor, dictum eu, placerat eget,",
    date: "2022-10-21 11:53 PM",
  },
  {
    id: 9,
    user: "Colin Keller",
    tittle:
      "Nulla dignissim. Maecenas ornare egestas ligula. Nullam feugiat placerat velit.",
    contents:
      "Suspendisse eleifend. Cras sed leo. Cras vehicula aliquet libero. Integer in magna. Phasellus dolor elit, pellentesque a, facilisis non, bibendum sed, est. Nunc laoreet lectus quis massa. Mauris vestibulum, neque sed dictum eleifend, nunc risus varius orci, in consequat enim diam vel arcu. Curabitur ut odio vel est tempor bibendum. Donec felis orci, adipiscing non, luctus sit amet, faucibus",
    date: "2022-12-27 9:39 AM",
  },
  {
    id: 10,
    user: "Christen Durham",
    tittle: "congue, elit sed consequat auctor, nunc nulla vulputate dui, nec",
    contents:
      "eu dolor egestas rhoncus. Proin nisl sem, consequat nec, mollis vitae, posuere at, velit. Cras lorem lorem, luctus ut, pellentesque eget, dictum placerat, augue. Sed molestie. Sed id risus quis diam luctus lobortis. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Mauris ut quam vel sapien imperdiet ornare. In faucibus. Morbi",
    date: "2022-10-06 3:20 AM",
  },
  {
    id: 11,
    user: "Rosalyn Rodriquez",
    tittle:
      "lobortis quam a felis ullamcorper viverra. Maecenas iaculis aliquet diam.",
    contents:
      "at, velit. Cras lorem lorem, luctus ut, pellentesque eget, dictum placerat, augue. Sed molestie. Sed id risus quis diam luctus lobortis. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Mauris ut quam vel sapien imperdiet ornare. In faucibus. Morbi vehicula. Pellentesque tincidunt tempus risus. Donec egestas. Duis ac arcu. Nunc mauris. Morbi non sapien molestie orci tincidunt adipiscing. Mauris molestie pharetra nibh. Aliquam ornare, libero at auctor ullamcorper, nisl arcu iaculis enim, sit amet ornare lectus justo eu arcu. Morbi sit amet",
    date: "2022-10-10 6:37 AM",
  },
  {
    id: 12,
    user: "Brian Skinner",
    tittle: "ornare. Fusce mollis. Duis sit amet diam eu dolor egestas",
    contents:
      "Sed pharetra, felis eget varius ultrices, mauris ipsum porta elit, a feugiat tellus lorem eu metus. In lorem. Donec elementum, lorem ut aliquam iaculis, lacus pede sagittis augue, eu tempor erat neque non quam. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Aliquam fringilla cursus purus. Nullam scelerisque neque sed sem egestas",
    date: "2022-11-07 4:21 AM",
  },
  {
    id: 13,
    user: "Jeremy Oneil",
    tittle:
      "nibh vulputate mauris sagittis placerat. Cras dictum ultricies ligula. Nullam",
    contents:
      "in consequat enim diam vel arcu. Curabitur ut odio vel est tempor bibendum. Donec felis orci, adipiscing non, luctus sit amet, faucibus ut, nulla. Cras eu tellus eu augue porttitor interdum. Sed auctor odio a purus. Duis elementum, dui quis accumsan convallis, ante lectus convallis est, vitae sodales nisi magna sed dui. Fusce aliquam, enim",
    date: "2023-04-24 10:53 PM",
  },
  {
    id: 14,
    user: "Nicholas Fulton",
    tittle:
      "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam laoreet,",
    contents:
      "aliquet molestie tellus. Aenean egestas hendrerit neque. In ornare sagittis felis. Donec tempor, est ac mattis semper, dui lectus rutrum urna, nec luctus felis purus ac tellus. Suspendisse sed dolor. Fusce mi lorem, vehicula et, rutrum eu, ultrices sit amet, risus. Donec nibh enim, gravida sit amet, dapibus id, blandit at, nisi. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin vel nisl. Quisque fringilla",
    date: "2023-02-15 10:25 PM",
  },
  {
    id: 15,
    user: "Demetrius Ferguson",
    tittle: "lorem eu metus. In lorem. Donec elementum, lorem ut aliquam",
    contents:
      "lectus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec dignissim magna a tortor. Nunc commodo auctor velit. Aliquam nisl. Nulla eu neque pellentesque massa lobortis ultrices. Vivamus rhoncus. Donec est. Nunc ullamcorper, velit in aliquet lobortis, nisi nibh lacinia orci, consectetuer euismod est arcu ac orci. Ut semper pretium neque. Morbi quis urna. Nunc quis arcu vel quam dignissim pharetra. Nam ac nulla. In tincidunt congue turpis. In condimentum. Donec at arcu. Vestibulum",
    date: "2022-11-05 10:56 PM",
  },
];

// 숙제

app.use(express.json());

// 게시글 전체 조회
app.get("/", (req, res) => {
  res.status(200).send(posts);
});

// 게시글 1개 조회
app.get("/post", (req, res) => {
  const { id } = req.body;
  const ids = posts.map((post) => post.id);
  if (id && ids.includes(Number(id))) {
    res.status(200).send(JSON.stringify(posts[Number(id) - 1]));
  } else {
    res
      .status(400)
      .send("게시물 조회에 실패하였습니다. 게시글 id를 확인해 주세요.");
  }
});

// 게시글 작성
app.post("/post", (req, res) => {
  const { user, tittle, contents } = req.body;
  const id = posts.length + 1;
  const date = new Date();
  if (contents.length <= 3) {
    res.status(400).send("본문을 4자 이상으로 입력해 주세요.");
  } else if (user && tittle && contents) {
    posts.push({ id, tittle, contents, user, date });
    res.status(200).send(posts);
  } else {
    res.status(400).send("제목, 작성자, 내용을 빠짐없이 입력하세요.");
  }
});

// 게시글 수정
app.put("/post", (req, res) => {
  const { id, user, tittle, contents } = req.body;
  const date = new Date();
  const ids = posts.map((post) => post.id);
  if (id && user && tittle && contents && ids.includes(id)) {
    posts[id - 1] = { id, user, tittle, contents, date };
    res.status(200).send(posts);
  } else if (id && user && tittle && contents && !ids.includes(id)) {
    res
      .status(400)
      .send("게시글 수정에 실패하였습니다. 유효한 게시글 id를 입력하세요.");
  } else {
    res
      .status(400)
      .send("게시글 수정에 실패하였습니다. 모든 필드를 채워 주세요.");
    // createdAt 과 date 두 개가 같이 있어서 날짜 부분은 유효성 검사 불가
  }
});

// 게시글 삭제
app.delete("/post", (req, res) => {
  const { id } = req.body;
  const ids = posts.map((post) => post.id);
  if (id && ids.includes(id)) {
    posts.splice(id - 1, 1);
    res.status(200).send(posts);
  } else {
    res
      .status(400)
      .send("게시글 삭제에 실패하였습니다. 게시글 id를 확인해 주세요.");
  }
});