익스프레스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) { // 풀 안의 모든 커넥션이 종료됨 });