반응형
라우팅정보 -> 서버연결 -> 스키마정의, 사용자모델정의
app.js
var config = require('./config'),
route_loader = require('./routes/router_loader'),
user = require('./routes/user'),
database = require('./database/database');
...
app.set('port', process.env.port || config.server_port);
route_loader.init(app, express.Router());
...
app.listen(app.get('port'), function () {
console.log('Server Started ' + app.get('port'));
//db연결
database.init(app, config);
});
더보기
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 crypto = require('crypto');
var config = require('./config'),
route_loader = require('./routes/router_loader'),
user = require('./routes/user'),
database = require('./database/database');
var app = express();
app.set('port', process.env.port || config.server_port);
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
}));
route_loader.init(app, express.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연결, 스키마 & 모델 정의
database.init(app, config);
});
config.js // 설정파일
module.exports = {
server_port :3000,
db_url : 'mongodb://localhost:27017/local',
db_schemas : [
{file:'./user_schema', collection:'users3', schemaName: 'userSchema',
modelName:'userModel'}
],
route_info : [
{file:'./user', path:'/process/login', method:'login', type: 'post'},
{file:'./user', path:'/process/adduser', method:'adduser', type: 'post'},
{file:'./user', path:'/process/listuser', method:'listuser', type: 'post'}
]
}
routes/route_loader.js
config.js 사용하기 위해 require('../config'); //점2개 #상대경로
더보기
var route_loader = {};
var config = require('../config');
route_loader.init = function(app, router) {
console.log('route_loader.init 호출됨.');
return initRoutes(app, router);
}
// route_info에 정의된 라우팅 정보 처리
function initRoutes(app, router) {
var infoLen = config.route_info.length;
console.log('설정에 정의된 라우팅 모듈의 수 : %d', infoLen);
for (var i = 0; i < infoLen; i++) {
var curItem = config.route_info[i];
// 모듈 파일에서 모듈 불러옴
var curModule = require(curItem.file);
console.log('%s 파일에서 모듈정보를 읽어옴.', curItem.file);
// 라우팅 처리
// router.route('/process/adduser').post(user.adduser);
if (curItem.type == 'get') {
router.route(curItem.path).get(curModule[curItem.method]);
} else if (curItem.type == 'post') {
router.route(curItem.path).post(curModule[curItem.method]);
} else {
router.route(curItem.path).post(curModule[curItem.method]);
}
console.log('라우팅 모듈 [%s] 설정됨.', curItem.method);
console.log('라우팅 경로 : '+ curItem.path);
}
// 라우터 객체 등록
app.use('/', router);
}
module.exports = route_loader;
database/database.js
user_schema.js 파일을 로딩하여 실행만 할뿐.
더보기
var mongoose = require('mongoose');
var database = {};
database.init = function(app, config){
console.log('init 함수 호출됨 ');
connect(app, config);
}
function connect(app, config){
console.log('connect 함수 호출됨')
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);
// 스키마 및 모델 정의★
createSchema(app,config);
});
//연결이 끊어졌을때 5초 후 다시 연결
database.on('disconnected', function () {
console.log('연결 끊어짐. 5초후 다시 연결합니다');
setInterval(connectDB, 5000);
});
// app 객체에 database 속성 추가
app.set('database', database);
}
function createSchema(app, config){
var schemaLen = config.db_schemas.length
console.log('config에 정의된 스키마 수 : '+ schemaLen);
for(var i = 0;i<schemaLen;i++){
var curItem = config.db_schemas[i];
var curSchema = require(curItem.file).createSchema(mongoose); // user_schema에 정의된 createSchema 함수임
console.log('%s 모듈을 물러온 후 스키마 정의함 ', curItem.file); // './database/user_schema'
// 사용자 모델 정의
var curModel = mongoose.model(curItem.collection, curSchema);
console.log('%s 컬렉션을 위한 모델 정의함 ', curItem.collection);
//database 객체에 속성 추가
database[curItem.schemaName] = curSchema;
database[curItem.modelName] = curModel;
console.log('스키마이름 : %s, 모델이름 : %s이 database 객체의 속성으로 추가됨', curItem.schemaName, curItem.modelName); // config.db_schemas[i].modelName
}
app.set('database', database);
console.log('database 객체가 app 객체의 속성으로 추가됨')
}
module.exports = database;
database/user_schema.js
더보기
var mongoose = require('mongoose');
var database = {};
database.init = function(app, config){
console.log('init 함수 호출됨 ');
connect(app, config);
}
function connect(app, config){
console.log('connect 함수 호출됨')
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);
// 스키마 및 모델 정의
createSchema(app,config);
});
//연결이 끊어졌을때 5초 후 다시 연결
database.on('disconnected', function () {
console.log('연결 끊어짐. 5초후 다시 연결합니다');
setInterval(connectDB, 5000);
});
// app 객체에 database 속성 추가
app.set('database', database);
}
function createSchema(app, config){
var schemaLen = config.db_schemas.length
console.log('config에 정의된 스키마 수 : '+ schemaLen);
for(var i = 0;i<schemaLen;i++){
var curItem = config.db_schemas[i];
var curSchema = require(curItem.file).createSchema(mongoose); // user_schema에 정의된 createSchema 함수임
console.log('%s 모듈을 물러온 후 스키마 정의함 ', curItem.file); // './database/user_schema'
// 사용자 모델 정의
var curModel = mongoose.model(curItem.collection, curSchema);
console.log('%s 컬렉션을 위한 모델 정의함 ', curItem.collection);
//database 객체에 속성 추가
database[curItem.schemaName] = curSchema;
database[curItem.modelName] = curModel;
console.log('스키마이름 : %s, 모델이름 : %s이 database 객체의 속성으로 추가됨', curItem.schemaName, curItem.modelName); // config.db_schemas[i].modelName
}
app.set('database', database);
console.log('database 객체가 app 객체의 속성으로 추가됨')
}
module.exports = database;
반응형
댓글