ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Nodejs Mysql 연동
    Share/Nodejs 2020. 11. 12. 20:54

     

     

    1. mysql 설정 ( @config ) 

    2. db pool 생성 

     

    * db pool 을 왜 사용하는지. 기능. 

     

    3. 

     

    /**
    * mysql 연동
    * module 설치
    */
    % npm install mysql --save
    
    /** config/config.js */
    /* DB pool 설정 */
    const config_db = {
    host : 'localhost',
    port : 3306,
    user : 'root',
    password : '1111',
    database : 'testdb',
    connectionLimit : 100,
    waitForConnections : false,
    timezone : 900,
    multipleStatements:true
    };
    config = {}
    config.config_db = config_db;
    module.exports = config;
    
    /** db_pool.js */
    /* mysql과 설정 로딩 */
    var mysql = require('mysql');
    var config = require('../config/config');
    
    /* pool 생성 */
    var pool = mysql.createPool(config.config_db);
    module.exports = pool;
    
    /** config/db.js */
    /* db pool 로딩 */
    var pool = require('./db_pool');
    
    /* query 정의 */
    var query = function (query, cb) {
    
    /* conection을 가져 옴 */
    pool.getConnection(function (err, connection) {
    if (err) {
    cb(err);
    return;
    }
    
    /* query를 실행 */
    connection.query(query, function (err, rows) {
    if (err) {
    connection.release();
    cb(err);
    return;
    }
    connection.release();
    cb(false, rows);
    });
    });
    };
    
    /* queryValues 정의 */
    var queryValues = function (query, values, cb) {
    pool.getConnection(function (err, connection) {
    if (err) {
    cb(err);
    return;
    }
    connection.query(query, values, function (err, rows) {
    if (err) {
    connection.release();
    cb(err);
    return;
    }
    connection.release();
    cb(false, rows);
    });
    });
    };
    
    /* freeconnections check */
    var check = function(connection) {
    if (pool._freeConnections.indexOf(connection) == -1)
    return true;
    return false;
    }
    
    /* db property 입력 */
    db = {};
    db.query = query;
    db.queryValues = queryValues;
    db.check = check;
    module.exports = db;
    
    /** models/user_model.js */
    /* db 로딩 */
    var db = require('../config/db');
    
    /* select All */
    var selectAll = db.query.bind(this,
    query = 'select * from users'
    );
    
    /* select test */
    var selecttest = db.queryValues.bind(this,
    query = 'select * from users where user_id = ?'
    );
    
    /* select user_id, password */
    var findOne = db.queryValues.bind(this,
    query = 'select * from users where user_id=? '
    + 'and password = CONCAT(\'*\', UPPER(SHA1(UNHEX(SHA1(?))))) limit 1'
    );
    
    /** user_model에 service 저장 */
    var user_model = {};
    user_model.selectAll = selectAll;
    user_model.findOne = findOne;
    user_model.selecttest = selecttest;
    module.exports = user_model;
    
    /** routes/login.js */
    /* selectAll 사용 */
    router.get('/test', function(req, res, next) { 
    user_model.selectAll(function(err,rows){
    if (err) { 
    console.log(err)
    } else {
    return res.send(rows) 
    }
    }); 
    }); 
    
    /* selecttest 사용 */
    router.get('/test2', function(req, res, next) { 
    user_model.selecttest(['test_id'], function(err,rows){
    if (err) { 
    console.log(err)
    } else {
    return res.send(rows) 
    }
    }); 
    }); 
    
    /** config/passport_local.js : findOne 사용 */ 
    var local_stratege = require('passport-local').Strategy;
    var users_model = require('../models/user_model');
    
    local_stratege = new local_stratege({
    usernameField: 'username',
    passwordField: 'password',
    passReqToCallback: false
    }, function(username, password, done){
    users_model.findOne([username, password], function(err,rows){
    if(err){
    console.log('err : ' + err);
    return done(err)
    } else if(rows.length === 1){
    var user = rows[0].user_id;
    console.log('authentication succeed');
    console.log(user);
    return done(null,user);
    } else {
    console.log('authentication failed');
    return done(null,false);
    }
    }); 
    }
    );
    module.exports = local_stratege

    -

     

     

    느낀점 

     

    - javascript 에 대해서 다시 빠르게 정독을 해보자 

    - error 두가지가 발생 

    1. alter 로 mysql root권한 부여를 또 해줘야 됨 

     

    2. selectall 함수에서 bind 하기전에 query 자체가 callback 함수를 부르기때문에, 

    selectAll( function ( err, row) { 

    }); 

    와 같은 형태를 구현해야 한다. 

     

     

    'Share > Nodejs' 카테고리의 다른 글

    webpack , scss, config파일 설정  (0) 2020.11.22
    Basic CRUD with express + mongodb  (0) 2020.11.18
    Nodejs MVC patter Setting  (0) 2020.11.16
    git 사용 요약  (0) 2020.11.16
    #4. node-auction  (0) 2020.01.24

    댓글

실험중인 삶, Life is not a race