05 웹 서버 만들기
Node.js는 웹 서버 기능을 내장하고 있어 아파치처럼 웹 서버로 사용할 수 있다.
웹 브라우저 -><- 웹 서버
웹서버를 구동하기 위한 main.js 에서 코드 해석을 해보자
var http =require('http');
var fs=require('fs');
var app = http.createServer(function(request,response){
var url = request.url;
if(request.url == '/'){
url = '/index.html';
}
if(request.url == '/favicon.ico'){
return response.writeHead(404);
}
response.writeHead(200);
response.end(fs.readFileSync(__dirname + url));
});
app.listen(3000);
response.end()는 웹 서버가 웹 브라우저의 요청에 응답하는 명령 이때 괄호 안의 내용을 웹 브라우저에 전달
10 URL 이해하기
Node.js에서 동적인 웹 페이지를 만들려면 URL 형식을 볼 필요가 있다
http://opentutorials.org:3000/main?id=HTML&page=12
1. http 어떤 방식으로 통신할 것인지 나타내는 프로토콜
2. open~ 도메인 네임 혹은 호스트. 호스트는 인터넷에 접속된 각각의 컴퓨터를 의미
3. 3000 포트번호, 클라이언트가 해당 포트로 연결된 서버와 통신
4. main 경로, 해당 컴퓨터 안에 있는 디렉터리에서 어떤 파일을 불러올 것인지
5. ?id=~ 쿼리 스트링, 쿼리 스트링을 사용하면 웹 서버에 데이터를 전달할 수 있다. 쿼리 스트링은 물음표로 시작하고 값과 값 사이에는 & 기호로 수분한다. 또한 이름과 값은 등호로 구분한다
URL로 입력된 값 사용하기
아까 만든 main.js에 코드 추가 해보자
var url = require('url');
우리가 만든 애플리케이션에 url이라는 모듈이 필요하다고 Node.js에게 요구.
이로써 우리는 main.js에서 url이라는 변수를 통해 Node.js의 url 모듈에 담긴 기능을 사용할 수 있다
하지만 url 변수가 2개가 되면 헷갈리니까 변수를 _url로 바꿔주자
그리고 url 모듈을 이용해 사용자가 요청한 URL을 분석한 다음 쿼리 스트링을 추출
var http =require('http');
var fs=require('fs');
var url = require('url');
var app = http.createServer(function(request,response){
var _url = request.url;
var queryDate = url.parse(_url, true).query;
console.log(queryData);
console.log(url);
if(request._url == '/'){
_url = '/index.html';
}
if(_url == '/favicon.ico'){
return response.writeHead(404);
}
response.writeHead(200);
response.end(fs.readFileSync(__dirname + _url));
});
app.listen(3000);
이 코드는 Node.js의 url 모듈에 들어 있는 parse 기능을 사용. 이 값을 분석해서 쿼리 스트링 문자열만 추출하는 코드
그래서 console.log(queryData)를 통해 변수에 어떤 값이 들어가 있는지 확인
변수가 객체임을 알 수 있다.
12. Node.js 파일읽기
var fs = require('fs');
fs.readFile('sample.txt', 'utf-8', function(err, data) {
console.log(data);
})
readFile은 파일을 읽는 기능
readdir은 특정 디렉터리에 있는 파일 목록을 배열로 돌려주는 기능
28 동기와 비동기 그리고 콜백
var fs = require('fs');
var result = fs.readFile('syntax/sample.txt', 'utf8', function(err, result){
console.log(result);
});
readFile이라는 기능을 이용해 첫 번째 인수로 전달한 경로에 있는 파일을 읽어옴
그런 다음 파일 읽기 작업을 마치면 세 번째 인수로 전달한 함수를 호출
이처럼 어떤 실행문을 마치면 내부적으로 자동 호출하는 기능을 '콜백'이라고 함