메모/에러 메모

Kotlin - retrofit API <-> NodeJS 서버 데이터 전송시 서버가 빈 객체를 받는 문제

surimi🍥 2021. 8. 14. 23:15
반응형

NodeJS의 body parser 설정을 고쳐 해결

  • 코틀린 retrofit API로 HashMap 객체 POST 전송

  • Retrofit Interface.kt

      @POST("/")
      @Headers("accept: application/json", "content-type: application/json")
      fun postRequest(
          @Body params: Map<String, String> 
      ): Call<ResponseDC>
  • MainActivity.kt

      // Hashmap 객체 생성
      val map = HashMap<String, String>()
      map.put("id", "0")
      map.put("pwd", "123")
      map.put("nick", "surimi")
    
      // 서버로 전송
      server.postRequest(map).enqueue((object : Callback<ResponseDTO> {
          override fun onResponse(
              call: Call<ResponseDTO>,
              response: Response<ResponseDTO>
          ) {
              Log.d("response : ", response?.body().toString())
              println(response?.body()?.data)
              println(response?.body()?.data?.id)
              println(response?.body()?.data?.pwd)
              println(response?.body()?.data?.nick)
          }
    
          override fun onFailure(call: Call<ResponseDC>, t: Throwable) {
    
          }
      }
  • NodeJS Server.js

      app.post(`/`, (req, res) => {
          var { id, nick, pwd } = req.body;
          console.log("POST " + id, nick, pwd);
          res.send({ "result": "POST 호출", "data": { id, nick, pwd } });
      })

    post로 받은 데이터가 담기는 req.body를 찍어보면 body 객체안에는 아무것도 담겨있지 않았는데,

      var bodyParser = require('body-parser')
    
      app.use(bodyParser.urlencoded({ extended: false }))
      app.use(bodyParser.json()) // for parsing application/json

    body parser 설정이 제대로 되어있지 않아 JSON 객체를 읽어오지 못하는 거였다.

    고쳐주니 해결.


반응형