본문 바로가기

프로그래밍 /Node JS

[Nodejs] Node Express 도입


Node js-express 도입

Express.jsNode.js의 핵심 모듈인 http와 Connect 컴포넌트를 기반으로 하는 웹 프레임워크다. 그러한 컴포넌트를 미들웨어(middleware)라고 하며,

따라서

개발자들은 특정 프로젝트에 필요한 라이브러리를 어떤것이든 자유롭게 선택할 수 있으며,이는 개발자들에게 유연함과 수준 높은 맞춤식 구성을 보장한다.


쉽게 Express는 Node.js에서 사용가능한 프레임워크 이고 Npm의 일종이다.


Express 를 사용 하지 않은 code

member 조회 code

// 주제: 여러 개의 요청 처리하기 - 각 요청을 함수로 분리하기
const http = require('http')
const url = require('url')
const mysql = require('mysql');

var pool = mysql.createPool({
   connectionLimit: 10,
   host: 'localhost',
   //port: '3306',
   database: 'studydb',
   user: 'study',
   password: '1111'
});
const server = http.createServer((req, res) => {
   var urlInfo = url.parse(req.url, true);
   if (urlInfo.pathname === '/favicon.ico') {
       res.end();
       return;
  }
   res.writeHead(200, {
       'Content-Type': 'text/plain;charset=UTF-8'
  });
   if (urlInfo.pathname === '/member/list') {
       list(urlInfo,req,res);
  } else if (urlInfo.pathname === '/member/add') {
       add(urlInfo,req,res);
  } else if (urlInfo.pathname === '/member/update') {
       update(urlInfo,req,res);
  } else if (urlInfo.pathname === '/member/delete') {
       remove(urlInfo,req,res);
  } else {
       res.end('해당 URL을 지원하지 않습니다!');
       return;
  }
});
server.listen(8000, () => {
   console.log('서버가 시작됨!')
})
function list(urlInfo,req,res) {
 var pageNo = 1;
 var pageSize = 3;
 if (urlInfo.query.pageNo) {
     pageNo = parseInt(urlInfo.query.pageNo)
}
 if (urlInfo.query.pageSize) {
     pageSize = parseInt(urlInfo.query.pageSize)
}
 var startIndex = (pageNo - 1) * pageSize;
 pool.query('select mid, email from pms2_member limit ?, ?',
        [startIndex, pageSize],
         function(err, results) {
     if (err) {
         res.end('DB 조회 중 예외 발생!')
         return;
    }

     for (var row of results) {
         res.write(`${row.email}, ${row.mid}\n`);
    }
     res.end();
});
}

Express사용시!!!

Express 모듈을 이용해서 분리 해보기

// 주제:코드를 모듈로 분리 ! - 요청 핸들러를 호출하는 코드 분리
// =>
const mysql = require('mysql');
const express = require('./express02');

var pool = mysql.createPool({
   connectionLimit: 10,
   host: 'localhost',
   //port: '3306', 생략가능
   database: 'studydb',
   user: 'study',
   password: '1111'
});


const app = express();

app.add('/member/list',(urlInfo,req,res)=>{
 var pageNo = 1;
 var pageSize = 3;

 if (urlInfo.query.pageNo) {
     pageNo = parseInt(urlInfo.query.pageNo)
}
 if (urlInfo.query.pageSize) {
     pageSize = parseInt(urlInfo.query.pageSize)
}

 var startIndex = (pageNo - 1) * pageSize;

 pool.query('select mid, email from pms2_member limit ?, ?',
        [startIndex, pageSize],
         function(err, results) {
     if (err) {
         res.end('DB 조회 중 예외 발생!')
         return;
    }

     for (var row of results) {
         res.write(`${row.email}, ${row.mid}\n`);
    }
     res.end();
});

// express 끝

app.listen(8000,()=>{
 console.log('서버 실행 중 ....!!')
})

Express module 직접 만들어서 사용해보자

모듈을 따로 만들어서 사용하면 유지보수하기가 훨씬더 수월하다.

// 주제: 요청 핸들러를 관리 + 호출
// =>
const http = require('http')
const url = require('url')
module.exports = function(){
 return{
   requestHandlerMap:{},
 add(url,handler){
   this.requestHandlerMap[url] = handler;
},
 getHandler(url){
   return this.requestHandlerMap[url];
},
 listen(port,callback){
     var mapper = this;
     const server = http.createServer((req, res) => {
       var urlInfo = url.parse(req.url, true);

       if (urlInfo.pathname === '/favicon.ico') {
         res.end();
         return;
      }
       res.writeHead(200, {
         'Content-Type': 'text/plain;charset=UTF-8'
      });
       var handler = mapper.getHandler(urlInfo.pathname);
       if(handler){
         try{
           handler(urlInfo,req,res);
        }catch(err){res.end('실행중 오류 발생');}
      }
       else {
         res.end('해당 URL을 지원하지 않습니다!');
         return;
      }
    });
     server.listen(port, callback);
  } //listen
}; //return
}

Express 사용하기

npm install express --save 로 다운!!!!

모듈을 통해서 객체를 만들어줘야 한다.모듈은 함수이기 때문에 어플리케이션을 리턴한다.리턴 값을 제어 하기 위해서 함수로 담아둔다.

// 주제:Express 사용하기
// =>
const mysql = require('mysql');
const app = require('express')();

var pool = mysql.createPool({
   connectionLimit: 10,
   host: 'localhost',
   //port: '3306',
   database: 'studydb',
   user: 'study',
   password: '1111'
});


//get 요청에 대해 핸들러를 등록하기
app.get('/member/list',(req,res)=>{
 var pageNo = 1;
 var pageSize = 3;

 if (req.query.pageNo) {
     pageNo = parseInt(req.query.pageNo)
}
 if (req.query.pageSize) {
     pageSize = parseInt(req.query.pageSize)
}

 var startIndex = (pageNo - 1) * pageSize;

 pool.query('select mid, email from pms2_member limit ?, ?',
        [startIndex, pageSize],
         function(err, results) {
     if (err) {
         res.end('DB 조회 중 예외 발생!')
         return;
    }

     for (var row of results) {
         res.write(`${row.email}, ${row.mid}\n`);
    }
     res.end();
});

});

// express 끝

app.listen(8000,()=>{
 console.log('서버 실행 중 ....!!')
})

express 모듈에 urlInfo 있기에 따로 넣지 않아도 적용된다.위에 말했듯이 express 는 모듈이 들어있는 프레임 워크 이기에코드가 훨씬더 간결해진다.

Express 기본 사용법

//1) 주제: express 사용하기 !!!

//2) express 모듈 로딩하기
const express = require('express')
// => express 객체 만들기
//= > 웹 서버 객체 준비
const app =express();

//3)=> URL 에 대해 함수를 연결하기
app.get('/test01',(req,res)=>{
 res.writeHead(200, {'Content-Type':'text/plain;charset=UTF-8'});
 res.write('test01....ok');
 res.end();
})

//4) 서버 실행 !!
app.listen(8000, () => {
   console.log('서버 실행 중...!!!');
});

'프로그래밍 > Node JS' 카테고리의 다른 글

[Nodejs]Node js 란?  (0) 2018.08.07