<Node.js with Express> 프론트서버로부터 받은 FormData를 Express서버에서 확인하고 싶습니다

조회수 1481회

렌더링된 화면에서 버튼을 누르면 mySubmit메서드가 실행되면서 Node서버에 xhr요청을 보냅니다. 이 때 formData에 각 필드 값이 잘 들어갔는지는 확인이 되었구요 (요청을 보내기 직전에 fd.get('email')를 찍어보면서 확인했습니다)

//  회원가입을 위한 vue컴포넌트.
// 하나의 컴포넌트를 이루는 template, js, css를 각각의 파일로 분리했고 그 중 js의 내용
// 템플릿에서 v-model디렉티브를 사용하여 input태그의 value와 컴포넌트의 data가 연결되어있음
export default {
  name: 'join',
  data () {
    return {
      emailField: '',
      nickField: '',
      pwField: ''
    }
  },
  methods: {
    mySubmit(evt) {
      evt.preventDefault();

      const fd = new FormData()
      fd.append('email', this.emailField)
      fd.append('nick', this.nickField)
      fd.append('password', this.pwField)

      const xhr = new XMLHttpRequest()
      xhr.onload = function() {
        console.log(xhr.responseText)
      }

      xhr.open('POST', 'http://localhost:3000/auth/join')
      xhr.send(fd)

    }

  }

아래의 라우터로 잘 들어와서 json객체를 프론트 서버로 반환하기까지 합니다.

// /auth/join 경로에 대한 라우팅
router.post('/join', isNotLoggedIn, (req, res, next) => {

    res.json({
        success: true,
        email: req.body.email,
        nick: req.body.nick,
        pw: req.body.password
    })

});

그런데 formData의 값이 req객체 내 어디로 들어가는지 모르겠어요.. 응답으로 돌아온 객체엔 {success: true}밖에 안나옵니다 req.body에 email이나 nick 등이 없기 때문이겠죠..?ㅠㅠ Express서버에서 req.body를 콘솔에 찍어봐도 텅 비어있고, req객체를 통째로 콘솔에 찍어서 찾아봐도 email이나 nick같은 정보가 들어있는걸 못봤어요ㅠ 그럼 도대체 요청할 때 같이 넣어서 보낸 formData를, 요청을 받은 Express서버에서는 어떻게 확인할 수 있을까요...

  • req.body가 비어 있다면 애초에 데이터 전송이 안된겁니다. 이거 한번 확인해 보세요. https://stackoverflow.com/a/44379697/8680764 엽토군 2020.1.5 17:06
  • @엽토군 허어... 링크 참고해서 헤더의 ContentType설정해주고 xhr.send()에서도 인자로 객체가 아니라 JSON.stringify()메서드를 넣어서 문자열로 바꾸어 전송했더니 됩니다ㅠ 근데 JSON.stringify()에 formData를 넣으면 여전히 데이터가 똑바로 넘어가지 않고 일반 객체를 만들어서 그 객체를 넣어줘야 똑바로 넘어가네요ㅠㅠ formData를 제대로 공부해야 할까요.. formData객체에 값은 분명 들어갔는데 xhr.send()안에 똑바로 넣는 방법을 알아봐야겠어요ㅠ 도움주셔서 감사합니다!! bvv8808 2020.1.5 18:18

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)