본문 바로가기

코딩/NodeJS

nodejs에서 회원 게시판 기능 만들기

반응형

1. 개요

  • 내가 쓴 글만 수정, 삭제할 수 있게 변경

2. 코드

(1) 글 작성할때 작성자 정보 저장하는 코드

// POST요청을 처리하는 소스
app.post("/add", function (req, res) {
  res.send("전송완료");
  console.log(req.body.title);
  console.log(req.body.date);
  // HTML에서 제목과 날짜 불러와서 변수에 저장
  var title = req.body.title;
  var date = req.body.date;
  // user의 id를 불러와서 변수에 저장
  var user = req.user._id;

  // counter라는 collection에서 데이터 가져오는 코드
  // 게시물갯수 라는 이름의 데이터를 찾아서 가져옴
  db.collection("counter").findOne(
    { name: "게시물갯수" },
    function (에러, 결과) {
      console.log(결과.totalPost);
      var 총게시물갯수 = 결과.totalPost;

      // DB에 저장할 내용을 변수에 저장
      var 저장할거 = {
        _id: 총게시물갯수 + 1,
        제목: title,
        날짜: date,
        작성자: user,
      };

      // 몽고db atlas에 post라는 collection도 만들었었음
      // db에 데이터 저장하는 코드임
      // 데이터 양식은 {키 : 밸류} 형태임
      // _id는 데이터의 인덱스값 같은거 적어주는거임
      db.collection("post").insertOne(저장할거, function (에러, 결과) {
        console.log("저장완료");
        // db의 값을 업데이트(수정)하는 코드
        // updateOne({수정할데이터},{$set : {수정값}},function(){})
        // $set이 update operator(연산자)임, 값을 바꿔줌
        // 연산자에는 $inc도 있음 이건 값을 더해줌
        db.collection("counter").updateOne(
          { name: "게시물갯수" },
          { $inc: { totalPost: 1 } },
          function (에러, 결과) {
            if (에러) {
              return console.log(에러);
            }
          }
        );
      });
    }
  );
});
  • /add URL로 get요청하는 코드에다가 추가합시다
  • 게시글을 저장할 때 작성자도 저장하는데
  • login collection에서 작성자의 _id를 가져와서 저장함
  • 근데 이거 저장하려면 /add 코드의 순서가 회원가입 코드보다 뒤에 있어야 함
  • 없는걸 가져올 순 없잖음

(2) 작성자만 게시글 삭제할 수 있는 코드

// 삭제 요청
app.delete("/delete", function (req, res) {
  console.log(req.body);
  req.body._id = parseInt(req.body._id);

  // 글번호와 작성자 정보를 확인 후 삭제하도록 변수 설정
  var 삭제할데이터 = { _id: req.body._id, 작성자: req.user._id };

  db.collection("post").deleteOne(삭제할데이터, function (에러, 결과) {
    console.log("삭제 완료");
    if (에러) {
      console.log(에러);
    }
    // 성공 시 200번(성공) 응답 보냄
    // 실패 시 400번(실패) 응답 보냄
    // send 옵션으로 메시지도 보낼 수 있음
    res.status(200).send({ message: "성공했습니다" });
    //res.status(400).send({message: '실패했습니다'});
  });
});

// /detail/:id로 요청 오면 처리 가능
app.get("/detail/:id", function (요청, 응답) {
  // DB에서 {_id : ??/}인 게시물을 찾음
  // 요청.params.pages는 해당값의 게시물을 찾으라는 뜻
  db.collection("post").findOne(
    { _id: parseInt(요청.params.id) },
    function (에러, 결과) {
      console.log(결과);
      // data라는 변수에 DB에서 찾은 데이터를 집어넣음
      응답.render("detail.ejs", { data: 결과 });
    }
  );
});
  • 얘도 순서 뒤로 밀어줘야 함
  • 삭제할데이터 라는 변수에 게시글번호와 작성자정보를 넣어서
  • DB에 삭제요청할때 해당 정보를 비교해서 삭제 요청 함
반응형