본문 바로가기
IT

Day5

by 깻잎쌈 2020. 1. 28.
반응형

DB연결, 사용자 추가, 사용자 인증 

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 mongoClient = require('mongodb').MongoClient;///

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 database;

//db에 연결
function connectDB(){
    //db 연결정보
    var databaseUrl = 'mongodb://localhost:27017/local';
    
    //db 연결
    mongoClient.connect(databaseUrl, function(err, db){
        if(err) {throw err; }
        
        console.log('db에 연결됬습니다. :'+databaseUrl );
        
        //db 변수에 할당 
        database = db.db('local');
    })
}

// 사용자 인증
var authUser = function(database,id, password, callback){
    console.log('authUser 함수 호출됨');
    
    //users 컬렉션 참조  
    var users = database.collection('users');
  
    users.find({"id":id, "password":password}).toArray(function(err,docs){
        if(err){
            callback(err,null);
            console.log(err.stack);
            return;
        }
        
        if(docs.length>0){
            console.log('아이디 %s, 비번 %s 일치하는 ㅅ 찾음', id,password);
            callback(null,docs);
        }else{
             console.log(' 일치하는 ㅅ 못 찾음');
            callback(null,null);
        }
    });
}

// 사용자 추가
var addUser = function(database,id,password, name, callback){
    console.log('adduser 호출됨 '+ id);
    
    var users = database.collection('users');
    
    users.insertMany([{"id":id, "password":password, "name":name}], function(err, result){
        if(err) {
            callback(err, null);
            return;
        }
        
        if(result.insertedCount >0){
            console.log('사용자 추가됨 :' + result.insertedCount);
        }else{
            console.log('추가된 거 없음');
        }
        
        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;
    
    //db가 연결되었으면
    if(database){
        authUser(database, paramId, paramPassword, function(err,docs){
            if(err){throw err; console.log(err.stack)};
            
            if(docs){
                console.dir(docs);
                var userName = docs[0].name;
                res.writeHead('200', {'Content-Type':'text/html;charset=utf8'});
                res.write('<h1> 로그인 성공 </h1>');
                res.write('<div><p>Param id : ' + paramId + '</p></div>');
                res.write('<div><p>Param password : ' + paramPassword + '</p></div>');
                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();
            }
        });
     //db랑 연결안됬으면
    }else{
            res.writeHead('200', {'Content-Type':'text/html;charset=utf8'});
            res.write('<h1> DB 연결 실패 </h1>');
            res.write('<div><p> DB에 연결하지 못했습니다 </p></div>');
            //res.write("<br><br><a href='/public/login.html'> 다시 로그인 </a>");
            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;
    
    console.log('요청 파라미터 : '+ paramId);
    
    //db 연결됬으면
    if(database){
        addUser(database,paramId,paramPassword, paramName, function(err,result){
            if(err){
                console.log(err.stack);
                throw err; 
            }
            
            // 추가된 거 있으면 
            if(result && result.insertedCount >0 ){
                console.log(result);
                
                res.writeHead('200', {'Content-Type':'text/html;charset=utf8'});
                res.write('<h1> 사용자 추가 성공 </h1>');
                res.write('<div><p>사용자 id : ' + paramId + '</p></div>');
                res.write('<div><p>사용자 name : ' + paramName + '</p></div>');
                res.end();
             //추가할거 없으면     
            }else{
                res.writeHead('200', {'Content-Type':'text/html;charset=utf8'});
                res.write('<h1> 추가 실패 </h1>');
                res.write("<br><br><a href = '/public/adduser.html'> 사용자 추가하기 </a>");
              // 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> 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'));
    
    //db연결
    connectDB();
});

 


 

mongoose써서 DB연결, 사용자 추가, 사용자 인증 

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 mongoClient = require('mongodb').MongoClient,
    mongoose = require('mongoose');

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 database;
var userSchema;
var userModel;

//db에 연결
function connectDB(){
    //db 연결정보
    var databaseUrl = 'mongodb://localhost:27017/local';
    
    //db 연결
    console.log('....db에 연결합니다. ' );
    //기본 promise(mPromise)를 노드의 promise로 교체
    mongoose.Promise = global.Promise;
    mongoose.connect(databaseUrl);
    
    database = mongoose.connection;
    
    //db 연결이 안됬을때 
    database.on('error', console.error.bind(console, 'mongoose 연결 error'));
   
    //db가 연결됬을때 
    database.on('open', function(){
         console.log('db에 연결됬습니다. :'+ databaseUrl );
        
        //스키마 정의
        userSchema =mongoose.Schema({
            id :String,
            name: String,
            password:String
        });
        console.log('스키마가 정의됨' );
        
        //userModel 정의
        userModel = mongoose.model("users", userSchema);
        console.log('사용자 모델 정의됨' );
    });
    
    //연결이 끊어졌을때  5초 후 다시 연결 
    database.on('disconnected', function(){
        console.log('연결 끊어짐. 5초후 다시 연결합니다' );
        setInterval(connectDB, 5000);
    });
    
}

// 사용자 인증
var authUser = function(database,id, password, callback){
    console.log('authUser 함수 호출됨');
    
    //id랑 비번으로 인증여부 확인
    userModel.find({"id":id, "password":password}, function(err,results){
        if(err){
            callback(err,null);
            return;
        }
        
        console.log('id :%s, password: %s 로 검색한 결과', id, password);
        console.dir(results);
        
        if(results.length > 0){
            console.log('일치하는 ㅅ 찾음');
            callback(null, results);
        }else{
            console.log('일치하는 사람 없음');
            callback(null,null);
        }
    });
    
}

// 사용자 추가
var addUser = function(database, id, password, name, callback){
    console.log('adduser 호출됨 '+ id);
    
    var user = new userModel({"id":id, "password":password, "name":name});
    
    user.save(function(err, result){
        if(err){
            callback(err, null);
            return;
        }
        console.log('사용자 데이터 추가함');
        callback(null,user);
    });
 
}

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;
    
    //db가 연결되었으면
    if(database){
        authUser(database, paramId, paramPassword, function(err,docs){
            if(err){throw err; console.log(err.stack)};
            
            if(docs){
                console.dir(docs);
                var userName = docs[0].name;
                res.writeHead('200', {'Content-Type':'text/html;charset=utf8'});
                res.write('<h1> 로그인 성공 </h1>');
                res.write('<div><p>Param id : ' + paramId + '</p></div>');
                res.write('<div><p>Param password : ' + paramPassword + '</p></div>');
                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();
            }
        });
     //db랑 연결안됬으면
    }else{
            res.writeHead('200', {'Content-Type':'text/html;charset=utf8'});
            res.write('<h1> DB 연결 실패 </h1>');
            res.write('<div><p> DB에 연결하지 못했습니다 </p></div>');
            //res.write("<br><br><a href='/public/login.html'> 다시 로그인 </a>");
            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;
    
    console.log('요청 파라미터 : ' + paramId + ', ' + paramPassword + ', ' + paramName);
    
    //db 연결됬으면
    if(database){
        addUser(database,paramId,paramPassword, paramName, function(err,result){
            if(err){
                console.log(err.stack);
                throw err; 
            }
            
            // 추가된 거 있으면 
            if(result) {// && result.insertedCount >0 ){ ★★
                  console.log('res11 : '+ result);
                
                res.writeHead('200', {'Content-Type':'text/html;charset=utf8'});
                res.write('<h1> 사용자 추가 성공 </h1>');
                res.write('<div><p>사용자 id : ' + paramId + '</p></div>');
                res.write('<div><p>사용자 name : ' + paramName + '</p></div>');
                res.end();
             //추가할거 없으면     
            }else{
                  console.log('res 22: '+ result);
                res.writeHead('200', {'Content-Type':'text/html;charset=utf8'});
                res.write('<h1> 추가 실패 </h1>');
                res.write("<br><br><a href = '/public/adduser.html'> 사용자 추가하기 </a>");
                res.end();
            }
        });
    }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'));
    
    //db연결
    connectDB();
});
반응형

'IT' 카테고리의 다른 글

Day7  (0) 2020.01.31
Day6  (0) 2020.01.29
Day4  (0) 2020.01.25
Day 3  (0) 2020.01.24
Day 2  (0) 2020.01.23

댓글