반응형

[MariaDB] 마리아DB Node.js - 노드.js MariaDB 연계 (MySQL)

 

Node.js에서 마리아DB에 연결을 하기 위해서는 npm을 통해 mysql을 설치해야 합니다.

npm install --save mysql

 

--save 옵션을 주게 되면 pakage.json 파일에 dependencies에 자동 등록이 됩니다.

 

pakage.json 파일의 dependencies에 등록이 되면 좋은 점이  있습니다.

차후 소스파일이 이동 됐을때 npm install 명령을 다시 하게 될텐데 그때 dependencies에 있는 항목들이 자동 설치됩니다.

 

node.js에서 MariaDB 연결부터 종료까지의 단계는 아래와 같습니다.

  1. MariaDB 연결 모듈 할당: 모듈할당용변수 = require('mysql);
  2. 커넥션객체 할당: 커넥션변수 = 모듈할당용변수.createConnection({host:'IP', user:'계정명', password:'비번', database:'DB명'})
  3. 마리아DB 연결 : 커넥션변수.connect();
  4. SQL문 실행: 커넥션변수.query('SQL문장', 콜백함수(에러받는변수, 접속결과받는변수, fields){ 콜백함수 실행내용 });
  5. MariaDB 연결종료: 커넥션변수.close()

 

opentutorials DB명에 붙어서 topic 테이블을 조회하는 소스

var mysql = require('mysql'); // mysql 변수에 mysql 모듈을 할당
var connection = mysql. createConnection({  //커넥션변수에 mysql변수에 있는 크리에이드커넥션 메소드를 호출(객체를 받음) 할당
    host    : 'localhost',   //host객체 - 마리아DB가 존재하는 서버의 주소
    user    : 'root', //user객체 - 마리아DB의 계정
    password    : 'password',   //password객체 - 마리아DB 계정의 비밀번호
    database    : 'opentutorials'   //database객체 - 접속 후 사용할 DB명
});

connection.connect();   // (위에 선언한 객체들을 가진)커넥션변수의 connect() 메소드를 호출하면 DB에 접속이 됨

connection.query('SELECT * FROM topic', function(error, results, fields){
// 커넥션.query 메소드를 호출해서(첫번째인자는 SQL문을주고, 두번째 인자로 콜백함수를 줌). 
// 첫번째 인자 쿼리가 실행되고 나서 두번째 콜백함수가 실행됨(에러가발생했으면error에 할당, 접속결과는 results에 할당)
    if (error) {
        console.log(error);
    } //에러에 값이 있다면 에러값을 콘솔에 출력
    console.log(results);
});

connection.end();

 

위 소스로 만든 mysql.js파일을 node로 실행시켜보면 topic 테이블의 내용이 객체 형태로 반환됩니다.

node.js를 이용한 마리아DB 테이블 내용 셀렉트 출력

 

DB접속정보를 db.js파일로 만들고 main.js 파일에서 모듈로 불러 들여서 쿼리로 사용 할 수도 있습니다.

먼저 db.js파일을 만듭니다.

var mysql = require('mysql'); // mysql 변수에 mysql 모듈을 할당

var db = mysql. createConnection({  //db변수에 mysql변수에 있는 크리에이드커넥션 메소드를 호출(객체를 받음) 할당
    host    : 'localhost',   //host객체 - 마리아DB가 존재하는 서버의 주소
    user    : 'root', //user객체 - 마리아DB의 계정
    password    : 'password',   //password객체 - 마리아DB 계정의 비밀번호
    database    : 'opentutorials'   //database객체 - 접속 후 사용할 DB명
});
// db.connet();

module.exports = db;

 

다음은 main.js에서 require('./db.js')로 접속정보를 가져와 변수에 집어 넣습니다.

이후 변수명.query('쿼리내용', function(에러시값받는변수, 성공시값받는변수)로 쿼리내용을 객체로 변수에 받습니다.

var db = require('./db.js'); // 현재폴더에 있는 db.js 파일 모듈로 가져오기(DB접속 정보가 있음) 
var http = require('http'); // 모듈 사용하기 - 변수 = require('사용할모듈명')

var app = http.createServer(function(request,response){

db.query(`SELECT * FROM topic`, function(error, result){
    // 커넥션.query 메소드를 호출해서(첫번째인자는 SQL문을주고, 두번째 인자로 콜백함수를 줌). 
    // 첫번째 인자 쿼리가 실행되고 나서 두번째 콜백함수가 실행됨(에러가발생했으면 임의변수 error에 에러값 할당, 접속결과 성공시 결과값 임의변수 topics에 할당)
    console.log(result)
    var html =   // 변수 html에 아래 html 코드를 입력
    `
    <!doctype html>
      <html>
      <head>
        <title>nodejs - mysql </title>
        <meta charset="utf-8">
      </head>
      <body>
        nodejs - mysql
      </body>
      </html>
    `
    
    response.writeHead(200);  // 응답: 상태 성공(200) 
    response.end(html); // 웹에 띄워줄 내용 (html변수)
});

})

app.listen(8088); // http.createServer()가 할당된 변수 app를 8088로 오픈

 

nodejs로 main.js를 실행시키면 웹서비스가 실행됩니다. ($ node main.js)

브라우저로 서버의 8088포트로 접속해 봅니다.

 

이제 위에 html변수 안에 들어가는 html코드 내용에 result 변수로 받은 sql객채들을 꺼내서 표현해 봅니다.

var db = require('./lib/db.js'); // 현재폴더에 있는 db.js 파일 모듈로 가져오기(DB접속 정보가 있음) 
var http = require('http'); // 모듈 사용하기 - 변수 = require('사용할모듈명')

var app = http.createServer(function(request,response){

db.query(`SELECT * FROM topic`, function(error, result){
    // 커넥션.query 메소드를 호출해서(첫번째인자는 SQL문을주고, 두번째 인자로 콜백함수를 줌). 
    // 첫번째 인자 쿼리가 실행되고 나서 두번째 콜백함수가 실행됨(에러가발생했으면 임의변수 error에 에러값 할당, 접속결과 성공시 결과값 임의변수 topics에 할당)
    console.log(result)
    var html =   // 변수 html에 아래 html 코드를 입력
    `
    <!doctype html>
      <html>
      <head>
        <title>nodejs - mysql </title>
        <meta charset="utf-8">
      </head>
      <body>
        <p>${result[0].id} / ${result[0].title} / ${result[0].description} </p>
        <p>${result[1].id} / ${result[1].title} / ${result[1].description} </p>
        <p>${result[2].id} / ${result[2].title} / ${result[2].description} </p>
      </body>
      </html>
    `
    
    response.writeHead(200);  // 응답: 상태 성공(200) 
    response.end(html); // 웹에 띄워줄 내용 (html변수)
});

})

app.listen(8088); // http.createServer()가 할당된 변수 app를 8082로 오픈

 

컨트롤 + C로 노드를 종료하고, nodejs로 main.js를 재실행시킵니다. ($ node main.js)

브라우저로 서버의 8088포트로 접속해 봅니다.

쿼리로 조회된 값을 객체로 받은 result 변수의 값들이 출력됩니다.

 

 

위와 같은 방식으로 쿼리내용에 업데이트, 인서트, 딜리트 sql문을 넣을 수도 있습니다.

db.query('쿼리내용', function(에러값, 결과값){ 실행내용 });

// 업데이트 예시
var name = '이름'
var profile = '프로필'
var id = '1234';

db.query(`
    UPDATE topic SET name=?, profile=? WHERE id=?`, // DB topic 테이블에 UPDATE하기. ?로 선한한 부분은 (,)뒤에 []로 표현된 값이 입력됨
    [name, profile, id],  // 윗줄 ?인 name에 '이름' 넣고, profile에 '프로필' 넣고, id에 '1234' 넣기
    function(error, result){	// 쿼리문 실행 후 변수에 값을 받음. 에러시 error변수에, 성공시 result변수에 값을 받고 {} 안에 내용 실행
    if(error){	// error 변수에 값이 존재할 경우
        throw error;	//빠저나가기
    }
    response.writeHead(302, {Location: `/`}); // 응답: 리다이렉션(302). 주소는 /
    response.end();
}
// 인서트 예시
var name = '이름'
var profile = '프로필'

db.query(`
    INSERT INTO topic (name, profile) VALUES(?, ?)`, // DB topic 테이블에 인서트 인투(name, profile)
    [name, profile],  // name에 '이름' 넣고, profile에 '프로필'넣기
    function(error, result){	// 쿼리문 실행 후 변수에 값을 받음. 에러시 error변수에, 성공시 result변수에 값을 받고 {} 안에 내용 실행
    if(error){
        throw error;
    }
    response.writeHead(302, {Location: `/`}); // 응답: 리다이렉션(302). 주소는 /
    response.end();
    }
)
// 딜리트 예시
var id = '1234'

db.query(`
    DELETE FROM topic WHERE id=?`, // DB topic 테이블에서 id가 아래줄에 선언한 id와 같은 값 지우기
    [id],  // id에 '1234' 넣기
    function(error, result){	// 쿼리문 실행 후 변수에 값을 받음. 에러시 error변수에, 성공시 result변수에 값을 받고 {} 안에 내용 실행
        if(error){
        throw error;
        }
        response.writeHead(302, {Location: `/`}); // 응답: 리다이렉션(302). 주소는 /
        response.end();
    }
)

 

 

[MariaDB] 전체보기

 

'MariaDB' 카테고리의 글 목록

전산 관련 경험을 기록 하는 곳

reddb.tistory.com

 

반응형