Rubberduck-Debugging

nodeJS http 본문

개발자/20181127 교육과정

nodeJS http

P缶 2019. 1. 7. 11:02

1. HTTP 서버 구동


var http = require('http'); 
var server = http.createServer(function(req, res) { 
    res.end(‘Hello World’); 
}).listen(3000);

2. HTTP 요청 (request)
-클라이언트 요청 분석
-var server = http.createServer(function(req, res){})


req.url : 요청 url, 경로와 쿼리 문자열 
req.method : 요청 메소드 
req.headers : 요청 메시지의 헤더 
req(streamable) : 요청 메시지 바디

등의 요청 정보 파악

3. HTTP 요청 쿼리 문자열 문석
-url 모듈 사용
var url = require("url");
url.parse(req.url,true);


4. HTTP 요청에 대한 헤더 메시지 문석
var headers = req.headers;
headers.host
headers.content-type
headers.user-agent

5. 요청 데이터 콘솔 출력하기 (실습)
var server = http.createServer(function(req, res) {
     console.log(‘HTTP Method : ' + req.method);
     console.log(‘HTTP URL : ' + req.url);
     console.log('== HEADERS ==');
     console.log(req.headers);
     res.end('Hello Node.js');
});

---------------------------------------------------------------
1. HTTP 응답 (response)
-응답 메시지
-상태 코드와 상태 메시지
-응답 메시지 헤더
-응답 메시지 바디

-메시지 상태
response.statusCode
response.statusMessage
-메시지 헤더
response.writeHead(statusCode[, statusMessage][, headers])
response.removeHeader(name)
response.getHeader(name)
response.setHeader(name, value)
-메시지 바디
response.end([data][, encoding][, callback])
response.write(chunk[, encoding][, callback])

2.HTTP 상태 코드 와 메시지
// 200 OK
response.statusCode = 200;
response.statusMessage = ‘OK’;
// 404 Error
response.statusCode = 404;
response.statusMessage = 'Not found';


3.응답(responae) 메시지
-응답 코드, 메시지 헤더 작성 함수 : writeHead 
res.writeHead(200, { 'Content-Length': body.length, 'Content-Type': 'text/plain' }); 

-헤더 작성하기 : setHeader 
res.setHeader("Content-Type", "text/html");
res.setHeader("Content-Length“, body.length);


4. 응답 데이터 바디
-response.write(chunk[, encoding][, callback]) 
-response.end()

실습_1   
var http = require('http');
var server = http.createServer(function(req, res) {
console.log('Method : ', req.method);
console.log('url : ', req.url);
console.log('headers : ', req.headers['user-agent']);
res.write('Hello World');
res.end();
}).listen(3000);

실습_2 _ status code, message를 보내고 code를 작성해보자
var http = require('http');
var server = http.createServer(function(req, res) {
res.statusCode = 200;
res.statusMessage = 'OKOK';
res.setHeader('content-type','text/plain');  //설정에 따라 Client 화면 다르게 보인다
res.write('<html><body><h1>Hello World</h1></body></html>');
res.end();
}).listen(3000);


실습_3 _ 파일을 불러오자
var http = require('http');
var fs = require('fs');

var server = http.createServer(function(req, res) {
fs.access('cat.jpg', function(err) { 
if ( err ) {
res.statusCode = 404;
res.end();
return;
}
fs.readFile('cat.jpg', function(err, data) {
res.end(data);
});
});
}).listen(3333);



실습_4 _ 파라미터를 가져오자
var http = require('http');
var url = require('url');
var server = http.createServer(function(req, res) {
// URL 분석 : 쿼리 문자열
var parsed = url.parse(req.url, true);
var query = parsed.query;
// start와 end
var start = parseInt(query.start);
var end = parseInt(query.end);
if ( !start || !end ) {
res.statusCode = 404;
res.end('Wrong Parameter');
}
else {
// 합계 구하기
var result = 0;
for(var i = start ; i < end ; i++) {
result += i;
}
res.statusCode = 200;
res.end('Result : ' + result);        // Result : 45
}

}).listen(3000);


---------------------------------------------
정적 파일 요청
-컨텐츠 타입
var server = http.createServer(function(req, res) {
 if ( req.url == '/favicon.ico' ) {}
 else if ( req.url == '/image.png' ) {
 res.writeHeader(200, {‘Content-Type':'image/png'});
 fs.read…
 }
 else if ( req.url == '/music.mp3' ) {
 res.writeHead(200, {'Content-Type':'audio/mp3'});
 fs.createReadStream…
 }
 else if ( req.url == '/movie.mp4' ) {
 res.writeHead(200, {'Content-Type':'video/mp4'});
 fs.createReadStream…
 }
});


정적 파일 서비스

-요청 URL의 경로를 실제 파일 경로 매핑
 myServier.com/resource/image.png -> ./resources/image.png
 myServier.com/resource/audio.mp3 -> ./resources/audio.mp3

-요청 URL에서 경로 생성
var pathUtil = require('path');
var path = __dirname + pathUtil.sep + 'resources' + req.url;





----------------------------------------------------------------------------------------


실습 구성하기
1. html 작성

<html>
<link rel="stylesheet" type="text/css" href='public/style.css'>
<body>
 <h1>Hello Kitty</h1>
 <img src='image/cat.jpg'>
</body>
</html> 

2. server 작성

var server = http.createServer(function (req, res) {
 if ( req.url == '/favicon.ico') {
 // 파비콘 응답
 }
 else if ( req.url == '/' ) {
 // 기본 페이지 : index.html
 fs.createReadStream('./public/index.html').pipe(res);
 }
 else {
 var path = __dirname + req.url;
 }
)}



'개발자 > 20181127 교육과정' 카테고리의 다른 글

nodeJS express  (0) 2019.01.08
nodeJS get, post , 실습  (0) 2019.01.07
nodeJs npm module  (0) 2019.01.07
nodeJS npm  (0) 2019.01.07
nodeJS 비동기식, 파일 다루기  (0) 2019.01.07