-
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