익스프레스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
* ''npm install'' 을 실행하면 패키지를 자동으로 설치.
* ''package.json'' 파일에 설치할 패키지 정보가 있다.
====== Nodemon ======
소스 수정시 자동으로 서버를 재시작해서 변경 내용을 바로 반영할 수 있는 도구.
개발시 매번 재시작하는 귀찮음을 해결해줌
npm install nodemon -g
커맨드를 바로 쓸 수 있어야 하니, 전역으로 설치한다.
실행
''nodemon npm start''
====== MYSQL ======
* 패키지 문서: https://www.npmjs.com/package/mysql
어 그런데, 마리아DBMariaDB를 쓰면 다른 패키지가 있네?
* 마리아DB : https://www.npmjs.com/package/mariadb
=====추가 정보 링크=====
* SSL 연결 : https://www.npmjs.com/package/mysql#ssl-options
* 풀링 연결 : https://www.npmjs.com/package/mysql#pooling-connections
=====설치=====
''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();
종료에는 두 함수를 제공
* ''end()'' : DB 서버에 ''COM_QUIT'' 를 전송해서 끊어지는것을 유도한다. 실패시 호출할 콜백을 지정할 수 있다.
* ''destroy()'' : 소켓을 삭제시켜 끊는다.
끊어달라고 하느냐, 내가 끊느냐 이 차이인가보다.
=====풀링 연결=====
* https://www.npmjs.com/package/mysql#pooling-connections
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) {
// 풀 안의 모든 커넥션이 종료됨
});