본문 바로가기
IT/web

Node.js] Mongoose 모듈로 DB 연결, 사용자 추가, 사용자 인증

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

컬렉션 안에 똑같은 속성을 가진 객체를 넣는다면 관계형 DB처럼 어떤 속성이 있는지 미리 알 수 있다.

이런 틀을 제공하는 것 중 몽구스 모듈이 대표적이다.

 

몽구스 모듈을 활용하여 스키마를 만들고, 스키마에 맞는 모델을 만들어 데이터를 보다 쉽게 관리한다.

 

 

 

(MongoDB) Mongoose(몽구스) 프로미스

안녕하세요. 이번 시간에는 몽구스로 프로미스(promise)를 사용하는 방법에 대해 알아보겠습니다. 기본적으로 몽고DB(노드용 드라이버)는 콜백으로 결과값을 반환합니다. 콜백은 간단하지만, 다들 아시다시피 중첩되었을 경우 콜백 지옥이 발생할 수 있다는 문제점이 있습니다

www.zerocho.com


스키마 추가

 

Mongoose v5.8.10: Schemas

Schemas If you haven't yet done so, please take a minute to read the quickstart to get an idea of how Mongoose works. If you are migrating from 4.x to 5.x please take a moment to read the migration guide. Everything in Mongoose starts with a Schema. Each s

mongoosejs.com


 

 

DB연결 

기본 promise(mPromise)를 노드의 promise로 교체

 mongoose.Promise = global.Promise;

 

open, error, disconnect등의 이벤트로 연결 상태 확인 가능하다.

//db에 연결
function connectDB(){
    //db 연결정보
    var databaseUrl = 'mongodb://localhost:27017/local';
    
    //db 연결
    console.log('...db에 연결합니다. ' );
    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 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 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);
        }
    });
    
}
반응형

댓글