express.urlencoded / GET / POST

길고 꾸준하게·2022년 5월 16일
0

Node.js퍼먹기

목록 보기
5/5
post-thumbnail

GET

클라이언트 -> 서버로 리소스에 대한 정보를 요청하기 위해 사용되는 메서드

데이터를 읽거나, 검색할 때 사용되는 메서드라고 할수있다.
GET요청은 body가 없기때문에 쿼리문(?,&)으로 데이터를 전송한다.

  • GET은 불필요한 요청을 제한하기 위해 '캐시'될 수 있다.
  • 쿼리문에 데이터가 노출되기때문에 민감한 데이터는 get 요청을 해서는 안된다.
  • 데이터 길이에 제한이 있다.
  • 응답코드로는 성공시 200(OK)
  • 항상 같은요청을 하면 같은 응답이 와야한다.(idempotent)
    => GET요청은 리소스를 수정/업데이트 하지 않기때문에.

POST

리소스를 생성/업데이트하기 위해 클라이언트가 서버에 데이터(body)를 보내는데 사용한다.

GET과 달리 데이터를 HTTP메세지 Body에 담아서 전송한다(get은 쿼리문).
그리고 해당 Body의 데이터 타입은 요청 헤더의 Content-Type에 따라 결정된다.

HTTP 메세지 Body에는 데이터의 길이제한 없이 데이터를 전송할수 있다.
=> GET은 길이제한이 있으므로 대용량의 데이터는 POST 메서드로 전송.

POST는 데이터가 http message body로 전송되고, 내용이 직접 눈으로 보이지는 않지만. 개발자 도구나 툴로 요청 내용을 볼수있기때문에.
마찬가지로 민감한 정보는 암호화해서 전송해야한다.

  • POST요청은 캐시되지 않는다.
  • 데이터 길이에 제한이 없다.
  • 응답코드로는 성공시 201(Created)
  • Non-idempotent하다. (요청에따라 응답이 항상 다를수있다)

리소스를 Update한다는건 수정/삭제가 가능하다는 거다. 그래서 POST 메서드로 할수는 있지만 더 용도에 맞는 메서드인 PUT/PATCH (수정) DELETE (삭제)를 사용하는것이 좋을듯 하다.

Content-Type

리소스의 media type을 나타내기 위해 사용됨.

  • media Type : 과거 MIME type. 파일의 형식을 나타내는 문자열

POST요청은 데이터를 body에 담는다 했고 body에 데이터타입은 기술된 content-type에 따라 정해진다고 했다.

그래서 뭐? -> express.urlencoded를 위한 빌드업.

Express.urlencoded()

Express에 내장된 '미들웨어' 기능.
urlencoded payload로 들어오는 요청을 분석한다.

  • 'urlencoded payload'와 함께 들어오는 request를 파싱한다.
  • Content-Type의 헤더가 'application//x-www-form-urlencoded' 옵션인 요청만 파싱한다.
  • 일치하는 content-type 헤더가 없거나 / 파싱오류 / 등이면 빈 객체( {} )를 request object에 채운다

이해하기론. request중 content-type의 헤더가 위의 것인것만 파싱해서 컨트롤러의 req인자에 넣어준다는것 같다.
그리고 내장된 '미들웨어'다 그리고 content-type의 헤더가 특정한 요청을 분석해야하니까 모든요청에대해 거치는 미들웨어여야 하니까 app.use()로 글로벌로 써야할거다.

app.use(espress.urlencoded({extended:true}))

extended 옵션

  • false인 경우 nodejs 기본 내장 'query-string' 모듈을 사용
  • true인 경우 따로 설치해야 하는 'qs' 모듈 사용.
    => express설치시 자동으로 포함되서 설치되며 / 중첩객체를 허용한다.

Express.json()

위와 비슷하지만 JSON형태의 데이터를 파싱해준다.

요약

//with pug
	form(method="post")
    	input(name="title",required,value=value)
        input(value="save",type="submit")
 
 // 확인 => req.body.title

form 태그.

form태그에 생각보다 많은 속성들이 있다.

  • method : form을 submit할때 사용할 HTTP메서드
    => get이 default고. get은 쿼리문으로 데이터를 보낸다했으니 url끝 쿼리문에 ?name(title)=value가 붙어서 요청을 보낼것이다.
  • action : form데이터를 처리할 프로그램의 URI (데이터를 받을 종착지의 URL을 적는 느낌.)
  • input name속성을 넣어줘야된다. 그래야 req.body부분에서 key(name):value형태로 데이터를 볼수있다.

출처

https://3-stack.tistory.com/60

https://sjh836.tistory.com/154

https://kirkim.github.io/javascript/2021/10/16/body_parser.html

https://velog.io/@songyouhyun/Get%EA%B3%BC-Post%EC%9D%98-%EC%B0%A8%EC%9D%B4%EB%A5%BC-%EC%95%84%EC%8B%9C%EB%82%98%EC%9A%94

profile
작은 나의 개발 일기장

0개의 댓글