form태그 이용한 파일 업로드

post json data

폼 데이터 어떻게 날아가느냐..?

    기본적으로 name="nm1" 을 기준으로 날아가고, 
    name="nm", name="nm[]" 이 같이있으면 데이터가 날아갈때는 nm=va1&nm[]=val2 이런식으로 날아가지만 노드서버에서 파싱하면 그냥 nm=[val1, val2] 가 된다
    post로쏘던 get으로 쏘던 문자열 데이터의 형식이 enocodedUrl 형식이란건 똑같아서 파싱도똑같다

    배열로 날릴때는 name="myKey[]" 여러개를 날리는게 공식이지만
    name="myKey"를 여러개날려도 서버파서가 배열로받는다(근데 어쩌다 input 하나만 날리면 또 String으로 받음)
    

      
        체크박스@@ 값 하나만 날리기 대괄호 []는 horns 라는 키값에 영향을 주지않는다
        (키값 무조건 horns이고 horns{}같은건 얄짤없이 키값이 'horns{}'로 박힌다)

        하지만 대괄호를 쓰지않으면 인자가 하나일경우(후술하겠지만 인자여러개면 그냥 배열로받음) url파서가
        horns ==> "horns": "ho1"  
        대괄호를쓰면 서버가
        horns[] ==> "horns": ["ho1"] 이렇게 받는다

        
        보내는값: 'horns[1]=ho1'==> horns%5B1%5D=ho1
        받는값
        "horns": [
          "ho1"
        ]


        보내는값: 'horns=ho1'==> horns=ho1
        받는값
        "horns": [
          "ho1"
        ]
        
        

      
        체크박스@@ 값 하나만 날리기 대괄호를 넣든 안넣든 키값은 horns로 통일된다
        보내는값: 'horns%5B%5D=ho1&horns%5B%5D=ho2&horns%5B%5D=ho3'==> 'horns[]=ho1&horns[]=ho2&horns[]=ho3'
        다대괄호를 안쓰든 horns=ho1&horns=ho2&horns=ho3
        한넘만다대괄호를 쓰든 horns[]=ho1&horns=ho2&horns=ho3
        죄다대괄호를 쓰든 horns[]=ho1&horns[]=ho2&horns[]=ho3
        서버에서는 똑같이 받는다 다만

        "병신" 같은게 있는데
        horns[99]=ho1&horns[9]=ho2&horns[8]=ho3  이런건 서버에서 파싱하면 배열이되는데
          "horns": [
            "ho1",
            "ho2",
            "ho3"
          ]

          @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
          @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
        horns[101]=ho1&horns[9]=ho2&horns[8]=ho3  100이 넘어가는순간

        "horns": {
          "1": "ho1",
          "2": "ho2",
          "101": "ho3"
        }
        이따구로 파싱됨 json씁시다
      
horns[]=ho1&horns=ho2&horns=ho3 이런식으로 한놈만 [] 대괄호를 쓰거나 해도 상관없이 배열로받는다

name="horns[101]" 이라서 서버에서 obj되는놈 ㅋㅋ


      

        아래내용을 encodeUrl 해서 쏘고
        'a()=azz@@&a=azz&a[0]=a1&a[]=a2&a[g]=a2&b=bb&scales=on&horns[1]=ho1&horns[f]=ho2&drone=huey' 

        a%28%29=azz%40%40&a=azz&a%5B0%5D=a1&a%5B%5D=a2&a%5Bg%5D=a2&b=bb&scales=on&horns%5B1%5D=ho1&horns%5Bf%5D=ho2&drone=huey



        서버에서는
          "body": {
            "a()": "azz@@",
            "a": {
              "0": "azz",
              "1": "a1",
              "2": "a2",
              "g": "a2"
            },
            "b": "bb",
            "scales": "on",
            "horns": {
              "1": "ho1",
              "f": "ho2"
            },
            "drone": "huey"
          }



          a[?] 에 숫자(0~100) 만 넣으면 그냥 List로 인식하는데 100초과한수, 알파벳등을 넣으면 바로 Map으로 인식함
        
      
      일단 URLSearchParams에 대해서좀 알아봅시다..(url로 보낼때는 decodeUrl해야됨)
      (new URLSearchParams({a:1, b:2})).toString() // 'a=1&b=2'
      (new URLSearchParams({a:[1,2,3], b:2})).toString() 'a=1,2,3&b=2'
      URLSearchParams이 배열을 저따구로 트랜스파일 하는데 서버에서 당연히 못받음 {a: "1,2,3", b: "44", c: "zzgg"} 서버는 배열로인식안함

      스택오버에서는 
      var data = new URLSearchParams();
      data.append('userName', 'test@gmail.com');
      data.append('password', 'Password');
      data.append('grant_type', 'password');

      이렇게넣으라는데 그럴거면 이거 왜쓰냐고..????.....