server 객체 : http 모듈에서 가장 중요한 객체, createServer() 메서드를 사용하여 생성
메서드 : listen(port[, callback])) 서버를 실행 / close([callback]) 서버를 종료
Port란?
포트는 컴퓨터와 컴퓨터를 연결하는 정보의 출입구 역할 하는 곳. 컴퓨터에는 0번 부터 65535번까지 포트가 있다.
사실 server 객체는 이벤트가 더 중요하다. server 객체는 EventEmitter 객체를 기반으로 만들어졌기 때문에 이벤트를 연결할 수 있다.
이벤트 이름 | 설명 |
request | 클라이언트가 요청할때 |
connection | 클라이언트가 접속할때 |
close | 서버가 종료될때 |
checkContinue | 클라이언트가 지속적인 연결을 하고 있을 때 |
upgrade | 클라이언트가 HTTP 업그레이드 요청할 때 |
clientError | 클라이언트에서 오류가 발생할 때 |
*on() 메서드를 사용해 객체에 이벤트를 연결
//모듈을 추출
var http = require('http');
//server 객체 생성
var server = http.createServer();
//server 객체에 이벤트를 연결
server.on('request',function(code){
console.log('Request On');
});
server.on('connection',function(code){
console.log('Connection On');
});
server.on('close',function(code){
console.log('close On');
});
server.listen(52273);
실행 후 웹 브라우저를 이용해 'http://127.0.0.1:52273'에 접속하면 이벤트들이 실행된다.
여기서는 웹페이지를 요청했지만 응답할 웹페이지가 없으므로 아무것도 출력되지 않습니다.
var http = require('http');
http.createServer(function (request,response){
response.writeHead(200,{'Content-Type' : 'text/html'});
response.end('<h1>Hello World!</h1>'); //html로 화면에 출력된다.
}).listen(52273, function (){
console.log('Server running at http://127.0.0.1:52273/');
});
-response 객체
위 server event 코드에서 접속 했으나 웹 브라우저에서는 아무 일도 일어나지 않는다. 요청을 전달 했으나 웹 서버가 응답 메시지를 전달하지 않았으므로 웹 브라우저가 응답을 기다리는 상태가 됐다.
requset 이벤트 리스너의 두번째 매개변수에 전달되는 response 객체 사용
메서드 : writeHead(statusCode[,statusMessage][,headers]) 응답 헤더 작성/ end([data][,encoding][,callback]) 응답 본문 작성
-File System 모듈을 사용한 HTML 페이지 제공
자바스크립트 파일 위에서 모든 HTML 페이지를 문자열로 작성하는 것은 불가능하다.
request 이벤트가 발생할때 readFile() 메서드를 사용해 클라이언트에서 html 페이지를 제공하게 만들어야 한다.
//모듈을 추출
var fs = require('fs');
var http = require('http');
//서버를 생성하고 실행
http.createServer(function(request,response){
//HTML 파일을 읽는다.
fs.readFile('HTMLPage.html',function(error,data){
response.writeHead(200,{'Content-Type':'text/html'});
response.end(data);
});
}).listen(52272,function(){
console.log('Server Running at http://127.0.1:52273');
});
*응답 헤더의 Content-Type' 속성을 바꾸면 사진이나 음성들을 올릴 수 있다. MIME 형식으로 입력한다.