본문 바로가기
IT

Day7

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

virtual 함수로 가상 속성을 지정한다.

 

info를 virtual 메소드로 정의

 userSchema = mongoose.Schema({
        id: {
            type: String,
            required: true,
            unique: true
        },
        //hashed_password:{type: String, required:true},
        //salt :{type: String, required:true},
        name: {
            type: String,
            index: 'hashed',
    
    ...
        }
    });

  
    // info를 virtual 메소드로 정의
    userSchema.virtual('infoo').set(function (info) {
            console.log('레레레');
            var splitted = info.split(' ');
            this.id = splitted[0];
            this.name = splitted[1];
            console.log('virtual info 설정함 : %s, %s', this.id, this.name);
        })
        .get(function () {
            return this.id + ' ' + this.name
        });

    console.log('user 스키마 정의됨 ');

    //모델 정의 
    userModel = mongoose.model("users4", userSchema);
   

 

infoo 속성만 할당했고

save()에서 저장되면서 id, name 속성이 저장된다.

// userModel 인스턴스 생성
    var user = new userModel({ "infoo": 'test22 태연' });
    
    user.save(function (err) {
        console.log('11');
        if (err) {
            throw err;     
        }
     ...

 



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

function createUserSchema() {

    //스키마 정의
    // password를 hase- 로 변경 
    // 모두 default 속성 추가 
    // salt 속성 추가 
    userSchema = mongoose.Schema({
        id: {
            type: String,
            required: true,
            unique: true
        },
        //hashed_password:{type: String, required:true},
        //salt :{type: String, required:true},
        name: {
            type: String,
            index: 'hashed',
            default: ' '
        },
        age: {
            type: Number,
            'default': -1
        },
        created_at: {
            type: Date,
            index: {
                unique: false
            },
            'default': Date.now
        },
        updated_at: {
            type: Date,
            index: {
                unique: false
            },
            'default': Date.now
        }
    });

    console.log('1');
    // info를 virtual 메소드로 정의
    userSchema.virtual('infoo').set(function (iinfoo) {
            console.log('레레레');
            var splitted = iinfoo.split(' ');
            this.id = splitted[0];
            this.name = splitted[1];
            console.log('virtual info 설정함 : %s, %s', this.id, this.name);
        })
        .get(function () {
            return this.id + ' ' + this.name
        });

    console.log('user 스키마 정의됨 2 ');

    //모델 정의 
    userModel = mongoose.model("users4", userSchema);
    console.log('user 모델 정의됨 3 ');

}


function findAll() {
    userModel.find({}, function (err, result) {
        if (err) {
            throw err;
        }

        if (result) {
            console.log('user 문서 객체 =>  15');
            for (var i = 0; i < result.length; i++) {
                console.log('#' + (i + 1) + ' ' + result[i]._doc.id + ' ' + result[i]._doc.name);

            }

            console.log('16');
        }
        console.log('17');
    })

    console.log('13');

}

function doTest() {
    // userModel 인스턴스 생성
    console.log('5');
    var user = new userModel({ "infoo": 'test22 태연' });
    console.log('6');
    
    //비동기니까 나중에 
    user.save(function (err) {
        console.log('11');
        if (err) {
            throw err;     
        }

        console.log('12 ');

        findAll();
        console.log('14 ');
    });


    console.log('info 속성에 값 할당함  7 ');
    console.log('id : %s, name  8 : %s', user.id, user.name);
}

//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 + '\n');

        // 스키마 정의 및 모델 정의
        createUserSchema();

        console.log('4 ');

        //test 진행 
        doTest();

        console.log('9');
        console.log('10');
    });


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

}


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' 카테고리의 다른 글

Day8  (0) 2020.02.01
Day7 -1  (0) 2020.01.31
Day6  (0) 2020.01.29
Day5  (0) 2020.01.28
Day4  (0) 2020.01.25

댓글