Back/Node.js

Node.js ajax-post mongodb로 데이터 보내기

Nodejs ajax-post mongodb로 데이터 보내기

 

강의에도 없어서, 이것저것 뒤지고, 뒤지고 뒤지다가 간신히 했다. 어휴 진짜..ㅠ

내가 뭘 어떻게 한지도 모르겠넹..

파이썬 flask로 했으면 바로 했을 텐데ㅠㅠ node는 클라이언트쪽을 잘 거치지 않고 서버쪽에서 뭔가 한 번에 내리고, 보내줘서 신기했다.

 

<html> or <ejs>

    <div style="text-align:center; margin-top:50px;">
        <div style="margin-top:20px;">
작성자 <input type=text placeholder="작성자" id="person22"> <br><br>
비밀번호 <input type=text placeholder="비밀번호" id="pwds"> <br><br>
제목 <input type=text placeholder="제목" id="name9"> <input type=text placeholder="주제" id="cate"><br><br>
내용<br>
<textarea placeholder="내용을 입력해주세요." id="contents"></textarea><br>
<button onclick="makeReview()">저장하기!</button>
</div></div>

각각 input의 id값들

person22

pwds

name9

contents

를 ajax로 가져온다.

 function makeReview() {
                    
                    let names = $('#name9').val()
                    let contents01 = $('#contents').val()
                    let person00 = $('#person22').val()
                    let pwd = $('#pwds').val()
                    let cate = $('#cate').val()
                    $.ajax({
                        type: "POST",
                        url: "/api/save",
                        data: {
                            "name": names,
                            "person": person00,
                            "content": contents01,
                            "pwd": pwd,
                            "category": cate
                        },
                        success: function (response) {
                            alert("저장 완료!");
                            window.location.reload();
                        }
                    })
                }

함수를 호출 한다.

여기서 중요한건 어차피 routers을 쓸거니까

routers는 api를 무조건 거치니 /api/save로 url에 접근하고,

 

서버단에서는 api에서 관리되는 js 파일에다가 /save 만해놓고 POST를 받을 거다.

 

data를 내려줄때는 name_give 이딴거 하지말고 그냥 db값이랑 똑같이 가져가자.. 이유가 있다.....

 

 

<server>

router.post("/save", async (req, res) => {

  try {
    const name = req.body.name;
    const person = req.body.person;
    const content = req.body.content;
    const pwd = req.body.pwd;
    const category = req.body.category;
    let goodsId = 0
    // isExist = await Goods.find({"goodsId"})
    
    // await는 await찍힌 부분이 들어왔을 때까지
    let data = await Goods.find({}).sort("-goodsId")
    
    if (data.length == 0) { goodsId = 1 }
    else { goodsId = data[0]["goodsId"] + 1 }
    //  if (isExist.length == 0)

    await Goods.create({
      goodsId,
      name,
      person,
      content,
      pwd,
      category,
      day: moment().format("YYYY-MM-DD")
    })

    res.send({ result: "success" })
  } catch (err) { console.error(err); next(err); }
});

/save에 post요청이 오면

변수부터 정해준다.

 

밑에 let data ~ else 이 부분은 goodsId의 중복을 방지하고 데이터가 하나씩 추가로 들어올 때마다 바로 전의 데이터와 비교해서

입력받을 때마다 바로 전 데이터의 goodsld 보다 +1씩 해준다.

 

 

Goods.create가 db로 가져가는 것이다.

신기한 것은

goodsId : goodsId

age : 28

이렇게 가져가는게 아니라,

그냥 저렇게 냅다 변수랑 db에 있는 키값이랑 똑같으면 알아서 가져간다ㅡㅡ