본문 바로가기

개발

[Node.js] Web Module - server & client




MEAN STACK node.js

테스트 환경 : Windows 10 64-bit



노드를 이용한 웹서버 만들기


이전 http 관련 포스팅 내용이랑 비슷하다.

달라진 점은 서버로 요청이 들어온 url을 파싱하여 파일을 직접 읽는다는 것.


fs모듈과 url모듈이 설치 되어 있지 않다면 설치하자.

npm install fs

npm install url



server.js 파일 생성후 아래 코드를 입력 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
var http = require('http');
var fs = require('fs');
var url = require('url');
 
// 서버 생성
http.createServer( function (request, response) {  
   // Parse the request containing file name
   // 요청 들어온 파일명으로 파싱 
   var pathname = url.parse(request.url).pathname;
   
   // 경로 + 파일명 콘솔 출력 
   console.log("Request for " + pathname + " received.");
   
   // '/'를 제외한 파일경로로 파일 읽기
   fs.readFile(pathname.substr(1), function (err, data) {
      if (err) {
         console.log(err);
         // HTTP Status: 404 : NOT FOUND
         // Content Type: text/plain
         response.writeHead(404, {'Content-Type''text/html'});
      }else{    
         // Page found      
         // HTTP Status: 200 : OK
         // Content Type: text/plain
         response.writeHead(200, {'Content-Type''text/html'});    
                  
         // response body에 파일내용 쓰기
         response.write(data.toString());        
      }
      // response body 전송
      response.end();
   });   
}).listen(8081);
 
console.log('Server running at http://localhost:8081/');
cs



결과 출력

Server running at http://localhost:8081



브라우져에서 http://localhost:8081 입력하고 이동하면 아래 오류메시지가 출력된다.

Request for / received.

{ [Error: ENOENT: no such file or directory, open ''] errno: -4058, code: 'ENOENT', syscall: 'open', path: '' }



연결할 html 페이지가 없기 때문이다 

현재 js파일 경로에 tmp폴더를 추가하고 test.html을 만들자

1
2
3
4
5
6
7
8
9
<html>
<head>
<title>Sample Page</title>
</head>
<body>
<h3>/tmp/test.html</h3>
<h3>Server running at http://localhost:8081/</h3>
</body>
</html>

cs



그리고  http://localhost:8081/tmp/test.html 접속


오류없이 html 내용이 잘 나오는걸 확인 할 수 있다. 




노드를 이용한 웹클라이언트 만들기


Web client가 어떤 용도로 사용되는지는 잘모르겠지만 일단 테스트를 해보자.

client.js 파일 생성후 아래 코드 입력.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var http = require('http');
var options = {
   host: 'localhost',
   port: '8081',
   path: '/tmp/test.html'  
};
 
// 콜백함수는 응답처리를 위해 사용됨
var callback = function(response){
   // body에 data(test.html) 내용을 업데이트 
   var body = '';
   response.on('data'function(data) {
      body += data;
   });
   
   response.on('end'function() {
      // body 콘솔 출력
      console.log(body);
   });
}
// 서버 요청 
var req = http.request(options, callback);
req.end();

cs


명령프롬프트(CMD)창을 새로 띄운 후 client.js를 실행한다.

node client



결과출력

<html>

<head>

<title>Sample Page</title>

</head>

<body>

<h3>/tmp/test.html</h3>

<h3>Server running at http://localhost:8081/</h3>

</body>

</html>


! /tmp/test.html 내용이 콘솔에 출력되는 걸 확인할 수 있다.

콘솔 출력이 아니라 html형식으로 출력한다면 서버에서처럼 화면을 확인할 수 있지 않을까? 아닌가? '';

차이점은 차차 알아보는걸로 하고 오늘은 여기까지.. 



참조 : http://www.tutorialspoint.com/nodejs/nodejs_web_module.htm





맨 위로