클라이언트 요청 처리
Jul 4, 2021
»
클라이언트 요청 처리
GET 처리
GET 요청 처리
주소값을 이용해 요청하는 방식으로
서버로 값을 전달하기 위해 주소 끝에 ?
를 붙이고 키1=값1&키2=값2
형태로 요청합니다
http://naver.com/Post.nhn?postId=3572432&cafeId=158763
위처럼 [naver.com/Post.nhn](http://naver.com/Post.nhn)
주소로 요청하게 되는데 서버측에서는 ?
다음의 값들을 변수와 값의 형태로 받아서 사용하게 됩니다. 이렇게 실제 주소값 뒤에 붙어가는 값을 Query String
이라고 합니다
Query String
은 주소형태로 요청할 수도 있고 HTML에 있는 form 태그를 사용해서 요청할 수도 있습니다
밑에는 서버측에서 Query String을 처리하는 코드입니다
// http 모듈 불러오기
let http = require("http");
// url 모듈 불러오기
let url = require("url");
// querystring 모듈 불러오기
let querystring = require("querystring");
// 서버 생성
let server = http.createServer(function (request, response) {
// 콘솔화면에 로그 시작 부분을 출력
console.log("--- log start ---");
// 브라우저에서 요청한 주소를 parsing 하여 객체화 후 출력
let parsedUrl = url.parse(request.url);
console.log(parsedUrl);
// 객체화된 url 중에 Query String 부분만 따로 객체화 후 출력
let parsedQuery = querystring.parse(parsedUrl.query, "&", "=");
console.log(parsedQuery);
// 콘솔화면에 로그 종료 부분을 출력
console.log("--- log end ---");
// 반환값 넘겨주기
response.writeHead(200, { "Content-Type": "text/html" });
response.end("Hello node.js!!");
});
// 서버 실행
server.listen(8080, function () {
console.log("Server is running...");
});
GET 요청
브라우저에 다음과 같이 입력해서 서버로 요청해보겠습니다
http://localhost:5001/?var1=newData&var2=153&var3=testdata2017
그러면 CMD에 다음과 같은 로그가 나타납니다
--- log start ---
// 1. 이부분이 let parsedUrl = url.parse(주소) 함수로 주소값을 객체화 한 부분입니다.
// 객체화 되기 때문에 parsedUrl.search 형태로 객체 내부의 변수값을 사용할 수 있습니다.
// 아래에서는 객체 내부의 query 라는 변수값을 가져와서 다시 객체화 합니다.
Url {
protocol: null,
slashes: null,
auth: null,
host: null,
port: null,
hostname: null,
hash: null,
search: '?var1=newData&var2=153&var3=testdata2017',
query: 'var1=newData&var2=153&var3=testdata2017',
pathname: '/',
path: '/?var1=newData&var2=153&var3=testdata2017',
href: '/?var1=newData&var2=153&var3=testdata2017'
}
// 2. 이 부분이 let parsedQuery = querystring.parse(parsedUrl.query,'&','=')
// 역시 위의 parsedUrl 객체에서 query 라는 변수값을 다시 querystring 으로 parsing 하여 객체화하였습니다.
// 해당 객체는 parsedQuery.var1 형태로 객체내부의 값을 사용할 수 있게 됩니다.
{ var1: 'newData', var2: '153', var3: 'testdata2017' }
--- log end ---
요청값 돌려주기
전달받은 값을 브라우저로 다시 전달해서 화면에 출력해보겠습니다
response.end
함수안에 값을 수정한뒤 서버를 다시 실행해보겠습니다
response.end('let1의 값은 '+parsedQuery.var1);
let1�섍컪=undefined, let2�섍컪=undefined, let3�섍컪=undefined
요따구로 나오게 화면에 출력됩니다
POST 처리
POST는 GET처럼 주소 끝에 query를 다는 것과는 달리 요청 BODY
에 담아서 서버측에 요청합니다
let http = require('http');
let querystring = require('querystring');
let server = http.createServer(function(request,response){
// 1. post로 전달된 데이터를 담을 변수를 선언
let postdata = '';
// 2. request객체에 on( ) 함수로 'data' 이벤트를 연결
request.on('data', function (data) {
// 3. data 이벤트가 발생할 때마다 callback을 통해 postdata 변수에 값을 저장
postdata = postdata + data;
});
// 4. request객체에 on( ) 함수로 'end' 이벤트를 연결
request.on('end', function () {
// 5. end 이벤트가 발생하면(end는 한버만 발생한다) 3번에서 저장해둔 postdata 를 querystring 으로 객체화
let parsedQuery = querystring.parse(postdata);
// 6. 객체화된 데이터를 로그로 출력
console.log(parsedQuery);
// 7. 성공 HEADER 와 데이터를 담아서 클라이언트에 응답처리
response.writeHead(200, {'Content-Type':'text/html'});
response.end('var1의 값 = ' + result);
});
});
server.listen(8080, function(){
console.log('Server is running...');
});
포스트맨을 사용해서 보내고 싶은 키와 값을 입력해서 보냅니다