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

home2 게시판 Node.js, Express 게시판 [AJAX로 삭제요청하기 2] ajax는 되는데 axios랑 fetch가 안됩니다

[AJAX로 삭제요청하기 2] ajax는 되는데 axios랑 fetch가 안됩니다

  • 이 주제에는 9개 답변, 3명 참여가 있으며 오은2 년, 3 월 전에 전에 마지막으로 업데이트했습니다.
10 글 보임 - 1 에서 10 까지 (총 10 중에서)
  • 글쓴이
  • #37999

    대영
    참가자
    안녕하세요
    강의 잘 보고있습니다.
    
    해당 강의를 보면서 그냥 제가 알고있던 fetch를 사용하는데,
    ajax로 data:{name:Number} 는 잘 보내지지만
    fetch는 보내지지 않습니다
    
    아예 빈 body가 도착합니다.
    
    구글링해보니
    스택오버플로우에 막 영어로 body parser가 json 객체 이외에는 
    정보를 받을 수 없어서 안된다는 말이 있던데,
    
    제가 알기로는 ajax나 fetch나 http프로토콜로 통신하는 원리는 똑같은 것으로 알고있습니다
    심지어 fetch 보낼 때 header에 json을 추가해줘도 해결이 안됩니다.
    그럼 json과는 관련이 없다는 말인데,
    도대체 원인이 무엇인지 궁금합니다.
    
    
    [되는코드]
    const onDelete = (e) => {
          let id=e.target.getAttribute('data-id')
          $.ajax({
            method:'DELETE',
            url:'/delete',
            data: {_id:id}
          }).done(function(res){
            console.log(res)
          })
        }
    
    
    [안되는 코드]
    const onDelete = (e) => {
          let id = e.target.getAttribute('data-id')
          console.log(id)
          
          fetch('/delete',{method:'DELETE',data:{_id: id}})
        .then(rs=>{
          console.log(rs.data)
        })
        .catch(err=>console.log(err))
        }
    encodeURI도 써보고 별거 다써봤지만 안됩니다.
    
    그냥 body가 {} 빈상태로 와요
    
    여기서 질문입니다.
    
    1. fetch로 안되는 원인이 무엇인지
    2. 해결 방법은 무엇인지 
    (실제 육감으로 느껴지는 속도차이는 미미하다고 하지만 jquery는 되도록 안쓰고 해결해보고 싶습니다.)
    
    3. 아시겠지만,
    mysql 기능중에 tail이라는 기능이 있어서 
    실시간으로 어떤 쿼리가 요청됐는지 볼 수 있습니다.
    "어! 분명히 댓글 수정을 눌렀는데 실제로는 수정이 안되네?"
    하고 tail을 보면 UPDATE 댓그르="새댓글"
    아! 댓글 컬럼을 댓그르 컬럼이라고 잘못적엇구나! 하고 알게되죠.
    mongoDB도 그와같이 쿼리 요청을 볼 수있는 기능이 있는지 궁금합니다.
    감사합니다.
    
    
    
    
    
    
    		
    	
    #38003

    대영
    참가자
    2번은 구글링 임시로 해결했습니다만 
    App.use에 바디파서.json 으로 바꾸면 됩니다
    그러면 write에서 body를 못보내게 돼서 진퇴양난이네요
    #38006

    codingapple
    키 마스터
    data : 어쩌구 말고 body : 어쩌구로 보냅시다 
    atlas의 경우 로그볼 수 있는 메뉴가 있는데 무료티어는 없을걸요 
    아마 mongodb shell로 접속해서 로그 출력해보거나 그래야합니다 어짜피 서버에서 쿼리문 console.log 가능해서 큰상관은 없습니다
    #38008

    대영
    참가자
    body로 당연히 바꿔봤습니다만, 역시나 빈 body가 갑니다
    
    fetch('/delete',{method:'DELETE',body:{_id: id},headers: {
                "Content-Type": "application/json"
              }})
    바디로 바꿔도 같습니다.
    
    #38030

    codingapple
    키 마스터
    서버파일 상단에 app.use(express.json()) 추가해야 유저가 보낸 json 데이터 해석가능합니다 
    body: 오른쪽에 있는 것도 JSON으로 바꿔서 보냅시다
    #38034

    대영
    참가자
    당연히 그것도 해봤습니다. 윗윗윗 댓글 참고바랍니다.
    그 해결책을 사용하면 이번에는 write기능이 작동안합니다.
    form에서 값을 못읽어오게  변해버려요 그렇게 하면..
    #38043

    codingapple
    키 마스터
    서버파일 상단을 그 코드로 수정이 아니라 추가만 하면 됩니다
    #38054

    대영
    참가자
    오 감사합니다 그냥 추가만하면되는군요
    #38102

    대영
    참가자
    이 건에 대해 궁금하신 분들을 위해 자답 추가합니다.
    
    걍 ajax랑 axios만 쓰세요
    fetch 쓰니깐 온갖 생각지도 못한 문제에 부딛치네요
    fetch 버리세요
    #74091

    오은
    참가자
    같은 시도, 같은 문제에 봉착했었는데.. 감사합니다.
10 글 보임 - 1 에서 10 까지 (총 10 중에서)
  • 답변은 로그인 후 가능합니다.

About

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

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

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