<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
npm install
을 실행하면 패키지를 자동으로 설치.package.json
파일에 설치할 패키지 정보가 있다.소스 수정시 자동으로 서버를 재시작해서 변경 내용을 바로 반영할 수 있는 도구. 개발시 매번 재시작하는 귀찮음을 해결해줌
npm install nodemon -g
커맨드를 바로 쓸 수 있어야 하니, 전역으로 설치한다.
실행
nodemon npm start
어 그런데, 마리아DBMariaDB를 쓰면 다른 패키지가 있네?
npm install mysql
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()
: 소켓을 삭제시켜 끊는다.끊어달라고 하느냐, 내가 끊느냐 이 차이인가보다.
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) { // 풀 안의 모든 커넥션이 종료됨 });