본문 바로가기
nodejs

[node.js] express 라우팅, CRUD / 쿼리스트링

by jinbro 2017. 4. 20.

[목표]
- 라우팅이 무엇인지 제대로 이해하기
- HTTP 메서드 개념 알아본 것 실제로 써보기
- CRUD 구현하기


[먼저 보면 좋은 것들]
- HTTP 메서드 + REST API 다가가기 : http://jinbroing.tistory.com/96


[라우팅이란]
- 길을 정하는 것
- 클라이언트의 요청(request)에 대한 응답(response)를 정하는 것
- URL으로 클라이언트가 요청할 때 어떤 응답을 할 것인지 정하는 것
- HTTP method(GET, POST, PUT, DELETE) 구분 필요
- 라우팅 해주지 않은 URL은 "CANNOT 주소" 페이지가 출력(404페이지 커스텀할 필요O)


[HTTP 메서드에 따라 express 라우팅하기 - CRUD]
1) GET 메서드, URL, 핸들러(요청, 응답 콜백함수) : 자원 리스트를 읽어올 때(READ)
1
2
3
4
5
app.get('/users'function(req, res){
     /*
          " http://도메인/users " 요청에 대한 핸들러(GET)
     */
})
cs

2) POST 메서드, URL, 핸들러(요청, 응답 콜백함수) : 자원 입력 요청할 때(CREATE)
1
2
3
4
5
6
7
app.post('/users'function(req, res){
     /*
          위와 같은 URL 이지만 HTTP 메서드 차이
          form에서 메서드를 POST로 설정함
          (특정 자원 db의 레코드를 생성할 때 사용 - CRUD 중 Create)          
     */
})
cs

3) PUT 메서드, URL, 핸들러(요청, 응답 콜백함수) : 자원 수정 요청할 때(UPDATE)
- 자원 db 테이블 중 특정 자원에 대한 컬럼 데이터 정보 업데이트 처리(id를 받아)할 때 사용
- 쿼리스트링으로 id값을 넘겨받아 자원 db 테이블에서 넘겨받은 id값에 해당하는 자원을 찾아 수정한 후 요청에 대한 응답함
- 쿼리스트링이란? 주소(PATH)로 지정한 값 이외에 추가적으로 넘겨받는 값이 있을 때 사용함
- 쿼리스트링은 하나가 아니라 여러개 사용할 수 있음 : &로 구분 
- 아래 쿼리스트링 사용 방법이 합쳐져있음
1
2
3
4
5
6
7
8
9
10
11
12
app.put('/users'function(req, res){
     var id = req.query.쿼리스트링명
     
     /* 
          요청할 때 주소값 - http://도메인/users?쿼리스트링명=1
          id 변수에 담길 값은 1
          쿼리스트링으로 받은 값을 가지고 서버 내부 처리를 한 후
          응답을 해주면 됨
     */
 
     res.send(id + "에 대한 처리가 완료되었음")
})
cs

- URL 뒤 ?를 붙인 후 쿼리스트링명=값 을 요청하면 됨
- req는 request 객체, req.query도 객체, req.query 객체 프로퍼티로 쿼리스트링이 추가됨
- 아래는 쿼리스트링를 받고 응답할 때 다시 보내주는 코드 결과임


4) DELETE 메서드, URL, 핸들러(요청, 응답 콜백함수) : 자원 수정 요청할 때(UPDATE)
- 자원 db 테이블 중 특정 자원에 대한 컬럼 데이터 정보 삭제 처리(id를 받아)할 때 사용
- PUT과 마찬가지로 특정 자원에 대한 처리이기때문에 쿼리스트링으로 id값을 받아 처리한 후 응답함
1
2
3
4
5
6
7
8
9
10
app.delete('/users'function(req, res){
     var id = req.query.쿼리스트링명
     
     /* 
          요청할 때 주소값 - http://도메인/users?쿼리스트링명=1
          id 변수에 담길 값은 1
          쿼리스트링으로 받은 값을 가지고 서버 내부 처리를 한 후
          응답을 해주면 됨
     */
})
cs

5) route() : 하나의 경로에 대한 HTTP method 체인 걸 수 있음
- PUT과 DELETE 메서드는 쿼리스트링으로 id값을 받아 업데이트, 삭제하도록 함
- 공식 api 문서 계속해서 보기!
1
2
3
4
5
6
7
8
9
10
11
12
13
app.route('/users')
     .get(function(req,res){
 
     })
     .post(function(req,res){
 
     })
     .put(function(req,res){
 
     })
     .delete(function(req,res){
 
     })
cs


[express 라우팅 코드 살펴보기]
1) GET 메서드, URL, 핸들러(요청, 응답 콜백함수)
1
2
3
4
5
app.get('/users'function(req, res){
     /*
          " http://도메인/users " 요청에 대한 핸들러(GET)
     */
})
cs
- app은 express 객체
- get은 HTTP 메서드 종류 중 1개 : 개발자가 요청에 대한 응답을 생각했을 때 어떤 메서드를 사용할 것인지 정하기
- 핸들러 함수는 콜백함수 : 클라이언트로부터 요청을 받으면 핸들러함수가 호출됨
- 핸들러 함수의 파라미터 : req - request의 객체, res response의 객체
- 파라미터로 설정되어있는 req, res 객체의 메서드로 요청에 대한 응답을 설정할 수 있음


[참고자료]
1) express 공식 api 기본 라우팅 : http://expressjs.com/ko/starter/basic-routing.html
2) express 공식 api 라우팅(자세히보기) : http://expressjs.com/ko/guide/routing.html

3) express 공식 api req 객체의 query 객체 프로퍼티 : http://expressjs.com/ko/4x/api.html#req.query



댓글