반응형
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();
});
반응형
댓글