본문 바로가기
  • 실행력이 모든걸 결정한다
Node.js/Node.js Basic

[Node.js] 객체를 파일 단위로 관리하기

by 김코더 김주역 2020. 10. 19.
반응형

객체를 파일 단위로 관리하면 유지보수에 큰 도움이 된다.

파일화의 유무에 따른 차이점을 명확히 확인하려면 아래 소스 코드의 if(_url =='/')문에 집중하면 된다.

이 if문 안의 내용 외에는 달라진 것이 없다.

 

<template에 담겨있는 html코드를 파일화하지 않았을 경우>

var http = require('http');
var fs = require('fs');
var qs = require('querystring');

var app = http.createServer(function(request,response){
    var _url = request.url;
    if(_url == '/'){
        var template=`
              <html>
                <form action="/delete_test" method="post">
                    <input type="text" name="title" placeholder="title">
                    <input type="submit" value="delete">
                </form>
              </html>
          `;
          response.writeHead(200);
          response.end(template);
    }
    else if(_url=='/favicon.ico') console.log(' ');
    else if(_url=='/delete_test'){
        var querystring = '';
        request.on('data',function(data){
            querystring+=data;
        })
        request.on('end',function(){
            var a = qs.parse(querystring);
            var title = a.title;
            fs.unlink(`../number/${title}`,function(){
                response.writeHead(302,{Location: '/'});
                response.end();
            })
        })
    }   
});
app.listen(3000);

 

<template에 담겨있는 html코드를 파일화 했을 경우>

(이 소스 코드와 동일 디렉토리에 있는 template.js에 html코드를 옮겨 담았다)

 

var http = require('http');
var fs = require('fs');
var qs = require('querystring');
var templates = require('./template'); //동일 디렉토리의 template 파일에서 export한 객체를 templates에 담기

var app = http.createServer(function(request,response){
    var _url = request.url;
    if(_url == '/'){
        response.writeHead(200);
        response.end(templates);
    }
    else if(_url=='/favicon.ico') console.log(' ');
    else if(_url=='/delete_test'){
        var querystring = '';
        request.on('data',function(data){
            querystring+=data;
        })
        request.on('end',function(){
            var a = qs.parse(querystring);
            var title = a.title;
            fs.unlink(`../number/${title}`,function(){
                response.writeHead(302,{Location: '/'});
                response.end();
            })
        })
    }   
});
app.listen(3000);

 

response.end 함수의 매개변수로 이 templates를 넣어주면 파일 연동이 완료 된다.

매우 간단한 예제라 파일화로 인한 폭발적인 효과는 없지만, 큰 프로젝트일 수록 파일 단위 관리는 빛을 발휘할 것이다.

 

마지막으로 필자가 조금 별난 실험을 해봤는데

이렇게 module.exports를 한 파일에 2개 이상을 하게 되면

제일 마지막에 export한 문장만 유효하다.

즉 template2만 export 된다는 것이다.

어쩌고 보면, module.exports도 하나의 객체만을 담을 수 있는 객체이므로 이러한 결과가 나오는것은 당연한 것이다.

반응형

댓글