반응형
커넥션 풀 설정
var mysql = require('mysql');
// MySQL 연결 설정
var pool = mysql.createPool({
connectionLimit :10,
host:'localhost',
user:'root',
password: '***my password*** ',
database:'**my database name**',
debug:false
});
커넥션 풀을 연결 개수를 제한하기 때문에 (connectionLimit)
사용 후에 반드시 풀에 다시 넣어줘야 한다.
conn.release()
pool.getConnection(function(err, conn){
if(err){
console.error(err.stack);
if(conn){
conn.release();
}
callback(err,null);
return;
}
...
쿼리문 입력
var data = {id:id, name:name, age:age, password:password};
var exec = conn.query('insert into users set ?', data, function(err, result){
...
var columns =['id', 'name','age'];
var tablename = 'users';
var exec = conn.query("select ?? from ?? where id = ? and password = ?",
[columns, tablename, id, password], function(err, rows){
...
?와 ??는 쓰이는 게 다르다
' ' 있고 없고
사용자 추가
// 사용자 추가
var addUser = function (id, name, age, password, callback) {
console.log('adduser 호출됨 ' + id);
//커넥션 풀에서 연결 객체를 가져옴
pool.getConnection(function(err, conn){
if(err){
console.error(err.stack);
if(conn){
conn.release();
}
callback(err,null);
return;
}
console.log('db 연결 스레드 ID : '+ conn.threadId);
//data를 객체로 만들기
var data = {id:id, name:name, age:age, password:password};
//SQL문을 실행
var exec = conn.query('insert into users set ?', data, function(err, result){
conn.release(); //
console.log('실행대상 sql : '+ exec.sql);
if(err){
console.log('SQL 실행 시 오류 발생');
console.log(err);
callback(err,null);
return;
}
callback(null,result);
});
})
}
라우팅 함수
더보기
//사용자 추가 라우팅 함수
router.route('/process/adduser').post(function (req, res) {
console.log('/process/adduser 호출됨');
var paramId = req.body.id || req.query.id;
var paramPassword = req.body.password || req.query.password;
var paramName = req.body.name || req.query.name;
var paramAge = req.body.age || req.query.age;
console.log('요청 파라미터 : ' + paramId + ', ' + paramPassword + ', ' + paramName+','+paramAge);
//pool 객체가 초기화된 경우
if(pool){
addUser(paramId,paramName,paramAge,paramPassword, function(err,result){
if(err){
console.log('사용자 추가 중 에러발생'+ err.stack);
res.writeHead('200', {'Content-Type': 'text/html;charset=utf8'});
res.write('<h1> 사용자 추가중 에러발생 </h1>');
res.write('<p>' + err.stack + '</p>');
res.end();
return;
}
//결과 있으면
if(result){
console.log(result); // 추가된 사용자 보여주고
console.log('inserted '+ result.affectedRows + +' rows')
var insertId = result.insertId;
console.log('추가한 레코드의 아이디 : '+ insertId);
res.writeHead('200', {'Content-Type': 'text/html;charset=utf8'});
res.write('<h1> 사용자 추가 성공 </h1>');
res.end();
}else{
res.writeHead('200', {'Content-Type': 'text/html;charset=utf8'});
res.write('<h1> 사용자 추가 실패 </h1>');
res.end();
}
});
//db 연결 실패
}else{
res.writeHead('200', {'Content-Type': 'text/html;charset=utf8'});
res.write('<h1> db연결 실패 </h1>');
res.end();
}
});
로그인 / 사용자 인증
// 사용자 인증
var authUser = function ( id, password, callback) {
console.log('authUser 함수 호출됨');
// 커넥션 풀에서 연결 객체를 가져옴
pool.getConnection(function(err, conn){
if(err){
if(conn){
conn.release();
}
callback(err, null);
return;
}
console.log('database 연결 스레드 id : '+ conn.threadId);
var columns =['id', 'name','age'];
var tablename = 'users';
//sql 실행
var exec = conn.query("select ?? from ?? where id = ? and password = ?",
[columns, tablename, id, password], function(err, rows){
conn.release();
console.log('실행대상 SQL : '+ exec.sql);
if(rows.length>0){
console.log('ID: %s, PASSWORD : %s 일치하는 ㅅ 찾음 ', id, password);
callback(null,rows);
}else{
console.log('일치하는 ㅅ 못 찾음 ');
callback(null, null);
}
});
})
}
라우팅 함수
더보기
router.route('/process/login').post(function (req, res) {
console.log('/process/login 호출됨 ');
var paramId = req.body.id || req.query.id;
var paramPassword = req.body.password || req.query.password;
if(pool){
authUser(paramId, paramPassword, function(err, rows){
if(err){
console.log('사용자 인증 중 오류 발생 : '+ err.stack);
res.writeHead('200', {
'Content-Type': 'text/html;charset=utf8'
});
res.write('<h1> 로그인 중 오류 발생 </h1>');
res.write('<p>' + err.stack + '</p>');
res.end();
return;
}
if(rows){
console.log(rows);
var username = rows[0].name;
res.writeHead('200', {
'Content-Type': 'text/html;charset=utf8'
});
res.write('<h1> 로그인 성공 </h1>');
res.write("<br><br><a href = '/public/login.html'> 다시 로그인 </a>")
res.end();
}else{
res.writeHead('200', {'Content-Type':'text/html;charset=utf8'});
res.write('<h1>로그인 실패</h1>');
res.write('<div><p>아이디와 패스워드를 다시 확인하십시오.</p></div>');
res.write("<br><br><a href='/public/login.html'>다시 로그인하기</a>");
res.end();
}
});
}else{
console.log('db 연결 실패');
res.writeHead('200', {'Content-Type':'text/html;charset=utf8'});
res.write('<h2>데이터베이스 연결 실패</h2>');
res.write('<div><p>데이터베이스에 연결하지 못했습니다.</p></div>');
res.end();
}
});
반응형
'IT > web' 카테고리의 다른 글
Node.js] config 설정파일 분리하기 (0) | 2020.02.04 |
---|---|
Node.js] 모듈화 (0) | 2020.02.02 |
Node.js] crypto 모듈로 비밀번호 암호화하기 (0) | 2020.01.31 |
Node.js] Mongoose 모듈로 DB 연결, 사용자 추가, 사용자 인증 (0) | 2020.01.28 |
Node.js] MongoDB 연결, 사용자 추가, 데이터일치여부 확인 (0) | 2020.01.28 |
댓글