반응형
MySQL 연결해서
사용자 등록 , 로그인
// MySQL 연결 설정
var pool = mysql.createPool({
connectionLimit :10,
host:'localhost',
user:'root',
password: 'my password',
database:'my db name',
debug:false
});
var express = require('express'),
http = require('http'),
path = require('path');
var bodyParser = require('body-parser'),
static = require('serve-static'),
expressErrorHandler = require('express-error-handler'),
cookieParser = require('cookie-parser'),
expressSession = require('express-session');
var mysql = require('mysql');
// MySQL 연결 설정
var pool = mysql.createPool({
connectionLimit :10,
host:'localhost',
user:'root',
password: 'my password',
database:'my db name',
debug:false
});
var app = express();
app.set('port', process.env.port || 3000);
app.use(bodyParser.urlencoded({
extended: false
}));
app.use(bodyParser.json());
app.use('/public', static(path.join(__dirname, 'public')));
app.use(cookieParser());
app.use(expressSession({
secret: 'my key',
resave: true,
saveUninitialized: true
}));
// 사용자 인증
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);
}
});
})
}
// 사용자 추가
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);
});
})
}
var router = express.Router();
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();
}
});
//사용자 추가 라우팅 함수
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();
}
});
app.use('/', router);
var errorHandler = expressErrorHandler({
static: {
'404': './public/404.html'
}
});
app.use(expressErrorHandler.httpError(404));
app.use(errorHandler);
app.listen(app.get('port'), function () {
console.log('Server Started ' + app.get('port'));
});
반응형
댓글