• 로그인
  • 장바구니에 상품이 없습니다.

home2 게시판 React 게시판 react-axios 에서 nodejs 서버로 post 요청

react-axios 에서 nodejs 서버로 post 요청

10 글 보임 - 1 에서 10 까지 (총 14 중에서)
  • 글쓴이
  • #11718

    Taeyoon Kim
    참가자

    app.js

    아래와 같이 App.js 에서 axios 사용하여 post 요청을 하였습니다. 

    <input onChange={(e) => {
    axios.post('/add', {inputToDB: e.target.value}).then((result) => {
    setPost(result.data)
    })
    }}/>

    server.js

    server.js 에서 아래와 같이 mongodb에 요청하였습니다.

    app.post('/add',function (req,res){
    db1.collection('testCollection').insertOne({input:req.body.inputToDB},function (error,result){
    console.log('completed')
    })
    })

    다시 정리하면, App.js에서 axios을 이용하여 input 값들을 post요청하고, server.js에서 app.post를 통해 mongoDB에

    넣어주도록 하였는데, DB에 값이 들어가지가 않습니다. "fail to load resource"란 에러메세지를 console창 통해서 확인했는데,

    혹시 axios.post할때, e.target.value 부분이 잘못된 건지... 아니면,mongoDB에서 insertOne을 잘못한건지 잘 모르겠습니다. 

    어쩌면 너무 쉬운건데, 제가 잘 모르는 것 같아 죄송합니다~

    #11735

    codingapple
    키 마스터

    일단 onchange 내부보다는 버튼을 누르거나 그럴 때 post요청을 하는게 좋아보입니다

    어떤문제인지 확인하려면 post요청시 console.log로 request.body 이런걸 출력하는 코드를 서버에 짜보시고 

    console.log가 작동 안되면 요청이 못들어온 것이기 때문에 리액트코드 문제일거고 

    request.body 출력이 잘 되는데 db에 저장만 안되는거면 db저장문법이 이상한 것이겠군요

    #11749

    Taeyoon Kim
    참가자

    네 감사합니다.~ 좀 더 해보겠습니다. 

    #11751

    codingapple
    키 마스터

    post요청시 /add 경로가 아니라 http 부터 시작하는 풀경로를 적어보도록 합시다 

    #11754

    Taeyoon Kim
    참가자

    아~ 넵! 감사합니다^^

    #11768

    Taeyoon Kim
    참가자

    해결하였습니다. ^^ 정말 감사드립니다!

    #11804

    Taeyoon Kim
    참가자

    axios.post('http://localhost:3002/create', querystring.stringify( {title:input.title,content:input.content})).then((result)=>{console.log(result.data)})
    }에서 기존에 undefined라고 나와서 query string.stringify 함수를 사용하니까 server.js의 app.post로 자료가 전달되었습니다. 수업에서 axios는 fetch와 다르게 json으로 바꿀필요가 없다고 알고 있는데, stringify함수를 써야 하는 이유를 모르겠습니다. ??

    두번째로는 post성공하고 get으로 하는게 쉬울거라 생각했는데, axios.get은 보내는데, server.js의 app.get에서 반응이 없습니다. console로 확인해봐도 반응이 없는데... 조언 부탁드립니다. axios.get을 통해요청보내면,app.get을 통해 express 서버가 요청을 받아서 db에서 데이터를 꺼내서 보내주는 것으로 이해하고 있습니다. 이래저래 해봐도 get 요청을 못받을 특별한 것은 없는것 같은데... 안되네요. 

    axios.get

    app.get

    mongoDB에 대해서 알아보다가, mongoose를 사용하면 명령은 더 편리하게 해주지만, MongoDB버전 업데이트나 신규명령을 지원하지 

    않는 상황이나 정해진 스키마를 무시하고 컬렉션을 수정할 필요가 있기 때문에 mongoDB기본 드라이버를 활용해야 한다고 해서 전 강사님이 진행하신 방식으로 해보려 하는데, 장기적으로 봤을때 mongoDB에 대한 이해도 높아질것 같아서 맞을 것 같은데, 강사님 의견 부탁드립니다.

    #11810

    codingapple
    키 마스터

    querystring.stringify 저거는 쿼리스트링으로 바꿔주는 함수라 쓸 필요는 없고 

    post요청시 그냥 { a : 1 } 이렇게 써도 됩니다 

    object 자료 만들 때 input.content, input.title 이런게 잘못된게 아닐까요

     

    get요청성공시 파일을 보내고 있어서 그렇습니다

    파일을 보내는게 아니라 데이터만 간단하게 보내봅시다 

    res.send 혹은 res.json 쓰면 될듯요 

    #11817

    Taeyoon Kim
    참가자

    답변 감사합니다. 하지만, 여전히 app.get에는 반응이 없는데, 제가 질문을 잘못드린 것 같습니다.

    아래와 같이 app.get 안에 있는 console.log("success to get in server.js")이 출력이 안됩니다. 

    app.get("/notes", function (req, res) {
    console.log("success to get in server.js")

    db1.collection('testCollection').find().toArray((error, result) => {
    console.log("server.js")
    console.log(result)

    #11821

    Taeyoon Kim
    참가자

    index.html 하나의 파일 요청을 받아서 올리는 거니까 app.get("/")으로는 받지만, axios.get(http://localhost:3002/notes)로 요청하는 경우 server.js의 app.get(/notes)에서는 /notes라는 주소를 인식하지 못하는게 아닌가요?

10 글 보임 - 1 에서 10 까지 (총 14 중에서)
  • 답변은 로그인 후 가능합니다.

About

현재 월 700명 신규수강중입니다.

  (09:00~20:00) 빠른 상담은 카톡 플러스친구 코딩애플 (링크)
  admin@codingapple.com
  이용약관
ⓒ Codingapple, 강의 예제, 영상 복제 금지
top

© Codingapple, All rights reserved. 슈퍼로켓 에듀케이션 / 서울특별시 강동구 고덕로 19길 30 / 사업자등록번호 : 212-26-14752 온라인 교육학원업 / 통신판매업신고번호 : 제 2017-서울강동-0002 호 / 개인정보관리자 : 박종흠