본문 바로가기

공부/Node.js

[Node.js] 몽구스(Mongoose)

NoSQL인 몽고DB 사용을 훨씬 편하게 해주는 라이브러리이다.

 

몽구스의 작동

이게 몽구스의 기본 작동 원리 이다.

NoSQL이기에 기본적으로 스키마가 존재하지 않는 MongoDB에 문서의 정보를 가져와서 스키마를 부여해주고 코드 내부에서는 스키마를 기준으로 조작할 수 있는 것이 몽구스이다.

 

function connectDB(){
    var databaseUrl = 'mongodb://localhost:27017/local';

    console.log('데이터베이스 연결을 시도합니다.');
    mongoose.Promise = global.Promise;
    mongoose.connect(databaseUrl);
    database = mongoose.connection;

    database.on('error', console.error.bind(console, 'mongoose connection error.'));
    database.on('open', function(){
        console.log('데이터베이스에 연결 되었습니다. : ' + databaseUrl);

        UserSchema = mongoose.Schema({
            id: String,
            name: String,
            password: String
        });
        console.log('UserSchema 정의함.');

        UserModel = mongoose.model("uers", UserSchema);
        console.log('UserModel 정의함.');
    });

    database.on('disconnected', function(){
        console.log('연결이 끊어졌습니다. 5초 후 다시 연결합니다.');
        setInterval(connectDB,5000);
    });
};

mongoose.connect(databaseUrl)을 통해서 연결을 하고 이것을 databse라는 변수에 저장을 해주면 mongoose.connection의 이벤트로 조작을 할 수 있다. 여기서 사용한건 처음 데이터베이스 연결이 되었을 때 일어나는 이벤트인 'open'을 보면 스키마를 미리 지정을 해주고 이 스키마와 "users"를 연결시켜준다.

 

 

var addUser = function(database, id, password, name, callback){
    console.log('addUser 호출됨 : ' + id + ', ' + password + ', ' + name);

    var user = new UserModel({"id":id, "password":password, "name":name});

    user.save(function(err){
        if (err){
            callback(err,null);
            return;
        }
        console.log("사용자 데이터 추가함.");
        callback(null, user);
    });
}

addUser의 코드이다. 이전 포스트 보았다면 이전 addUser에 비해서 한참 간소화 된 것을 알 수가 있다. user라는 변수에 UserModel 객체를 하나 만들어서 넣어준다. 그리고 매개변수로 들어온 id, password, name을 매칭 시켜준다. 이 코드에서는 save함수를 사용해서 사용자 데이터를 추가하는 것을 볼 수 있다.

 

 

var authUser = function(database, id, password, callback){
    console.log('authUser 호출됨.');
    
    UserModel.find({"id" : id, "password" : password},function(err,results){
        if(err){
            callback(err,null);
            return;
        }

        console.log('아이디 [%s], 비밀번호 [%s]로 사용자 검색 결과', id, password);
        console.dir(results);
        
        if(results.length > 0){
            console.log('일치하는 사용자 찾음.', id, password);
            callback(null, results);
        }else{
            console.log('일치하는 사용자 못 찾음.');
            callback(null, null);
        }
    });
}

마찬가지로 authUser이다. 이 코드에서는 find를 통해서 id와 password 모두 동일한 사용자를 찾아서 사용자 정보 검색을 할 수 있다.

 

위의 코드를 제외한 나머지 Route.route와 app.post는 건드리지 않았다. 결국 callback 함수 부분은 동일한 결과를 내고 그 결과를 바탕으로 홈페이지에 노출 시키고 동작시키는 것 같아서 그런 것 같다.