목차

<title>node.js</title>

익스프레스express 프레임워크

설치

전역설치

npm install -g express-generator

윈도우즈라면 %APPDATA%\npm\node_modules에 설치된다.

프로젝트 생성

프로젝트 만들기

express <프로젝트 이름>

ejs와 pug?를 쓸수 있도록 프로젝트 만들기

express --ejs --pug --view=ejs <프로젝트이름>

설치 하고 해야할거 더 알려준다. 이런 식으로.

change directory:
    > cd <프로젝트 이름>

install dependencies:
    > npm install

run the app:
    > SET DEBUG=<프로젝트 이름>:* & npm start

Nodemon

소스 수정시 자동으로 서버를 재시작해서 변경 내용을 바로 반영할 수 있는 도구. 개발시 매번 재시작하는 귀찮음을 해결해줌

npm install nodemon -g

커맨드를 바로 쓸 수 있어야 하니, 전역으로 설치한다.

실행

nodemon npm start

MYSQL

어 그런데, 마리아DBMariaDB를 쓰면 다른 패키지가 있네?

추가 정보 링크

설치

npm install mysql

require 설정

var mysql = require('mysql');

초기화

var _conn = mysql.createConnection({
    host: 'localhost',
    port: 3306,
    user: '<계정>',
    password: '<암호>',
    database: '<접속할 DB>'
});

접속

_conn.connect(function (err) {
    if(err){
        console.error(err);
        //throw err; // throw를 해버리면 앱이 정지되니 ...
    } else {
        // 연결 성공:
    }
});

쿼리

_conn.query('SELECT 1 + 1 AS solution', function (error, results, fields) {
    if (error) throw error;
    console.log('The solution is: ', results[0].solution);
});

종료

_conn.end();

종료에는 두 함수를 제공

끊어달라고 하느냐, 내가 끊느냐 이 차이인가보다.

풀링 연결

var pool  = mysql.createPool({
  connectionLimit : 10, // 이건 개수겠지
  host            : '<접속할 도메인 or 주소>',
  user            : '<멤버 아이디>',
  password        : '<암호>',
  database        : '<디비>'
});

mysql.createPool 호출한 다음 바로 query()를 쓸 수 있다.

pool.query('SELECT 1 + 1 AS solution', function (error, results, fields) {
  if (error) throw error;
  console.log('The solution is: ', results[0].solution);
});

위의 방법이 pool.getConnection()connection.query()connection.release() 과정을 축약한 것.

한번 사용한 디비 커넥션을 이어서 사용해야할 경우,

pool.getConnection()으로 디비 커넥션을 얻은 다음 사용하는 방법도 있다. 아래 코드처럼 쓰는 모양.

var pool  = mysql.createPool(...);
 
pool.getConnection(function(err, connection) {
  if (err) throw err; // 연결실패
 
  // 연결 사용
  connection.query('SELECT something FROM sometable', function (error, results, fields) {
 
    // 변수'connection'은 여기에서도 쓸 수 있겠지?
 
    connection.release(); // 다 썻으면 풀에 보내기
 
    if (error) throw error; // 에러 처리를 해야할때가 있나?
    // error가 있더라도 release()는 호출되어야 한다.
 
    // 커넥션은 풀에 반환 되었기 때문에 이 시점에는 쓰면 안됨
  });
});

풀링 종료

pool.end를 호출해서 풀pool을 끊는다.

pool.end(function(err) {
  // 풀 안의 모든 커넥션이 종료됨
});