[Electron] database 연결하기
Database(Mysql) 에 정상적으로 연결되었는지 Main 프로세스에서 체크한 후 결과를 화면(renderer)에 표시하려고 한다.
파일 구조는 아래와 같이 구성했다.
- main.js : 메인 프로세스
- database
└ db_info.js : database 정보
└ db_conn.js : database 연결 함수 정의
- app
└ main.html
└ renderer.js
간략히 설명하면
내가 구성한 코드의 작동 순서는 다음과 같다.
1) renderer.js 에서 main으로 database 가 연결되었는지 확인 요청함
2) main.js 에서 database 연결을 db_conn.js 의 open 함수를 통해 체크한 후
open 함수에서 결과를 renderer.js 로 전송함.
먼저, db_info.js 파일에 연결한 데이터베이스 정보를 적는다.
( * 따로 파일을 분리한 이유는 후에 배포할 때, 해당 정보는 중요한 정보이기 때문에 숨기기 위해서 이다. )
// 파일명 : db_info.js
module.exports = (function () {
return {
local: {
host: 'localhost',
port: '3306',
user: 'root',
password: ''
}
}
})();
그다음, db_conn.js 파일에 mysql(database) 연결관련 함수모듈을 만들어준다.
* $ npm install mysql
* 각 함수별 기능
- init : mysql connection 생성
- open : connection 연결
- close : connection 닫기(종료)
* BrowserWindow.getFocusedWindow() : 현재 포커스를 갖고 있는 윈도우를 반환함.
* connect 가 비동기로 실행되기 때문에 return 으로 연결 결과가 바로 전달되지 않기 때문에,
webcontents.send() 를 통해 연결 결과를 renderer로 전달하였다.
/*
* 파일명 : db_conn.js
* Connect DataBase ( MySQL )
*/
const mysql = require('mysql');
var config = require('./db_info'); // db 정보
const { BrowserWindow } = require('electron');
module.exports = function () {
return {
init: function () {
return mysql.createConnection(config.local);
},
open: function (conn) {
const mainWindow = BrowserWindow.getFocusedWindow();
conn.connect(function (err, callback) {
if (err) {
console.log("[ERROR] Can not Connected to MySQL!");
mainWindow.webContents.send('callFunction', 'connect', false);
} else {
console.log("[INFO] Connected to MySQL!");
mainWindow.webContents.send('callFunction', 'connect', true);
}
})
},
close: function (conn) {
conn.end(function (err) {
if (err) con.destroy(); // 에러가 발생할 경우 즉시 강제 종료.
console.log("[INFO] Connection closed.")
mainWindow.webContents.send('callFunction', 'disconnect', true);
})
}
}
}
이제, renderer.js 에서 main 프로세스로 메세지를 보내 연결이 되었는지 확인한다.
// 파일명 : renderer.js
ipcRenderer.send('connect', {});
메인 프로세스에서 메세지를 받아 database 연결을 확인한다.
* 연결되었는지에 대한 결과는 이전에 db_conn.js 에서 renderer로 보내도록 정의했기 때문에
이 곳에서는 db_conn.js 의 연결 함수만 실행하였다.
/*
* 파일명 : main.js
* Check Database is Connected
*/
const ipcMain = require('electron').ipcMain;
var db = require('./database/db_conn')();
ipcMain.on('connect', (event, arg) => {
var conn = db.init();
db.open(conn);
})
마지막으로, main 프로세스에서 보낸 메세지를 renderer에서 받으면 된다.
// 파일명 : renderer.js
// Main 프로세스에서 보낸 메세지 받음.
ipcRenderer.on('callFunction', function (event, functionName, param) {
switch (functionName) {
// database
case "connect":
check_dbconnect(param);
break;
case "disconnect":
break;
}
});
// 연결 체크 함수
function check_dbconnect (param) {
if (param) // 성공
console.log("[INFO] Connected to MySQL!");
else // 실패
console.log("[ERROR] Can not Connected to MySQL!");
}
'WEB > Electron' 카테고리의 다른 글
[Electron] HTML에 다른 HTML 파일을 include하여 사용하기 (0) | 2019.04.16 |
---|---|
[Electron] 탐색기 여는 방법 (0) | 2019.04.08 |
[Electron] Global Variable 사용 방법 (0) | 2019.04.05 |
[Electron] contextmenu 만드는 방법 (0) | 2019.04.04 |
[Electron] 특정 위치에서만 메뉴(context-menu) 보이도록 설정하는 방법 (0) | 2019.03.21 |