diff --git a/backend/model/mongoose/DatabaseManager.ts b/backend/model/mongoose/DatabaseManager.ts
index a7b0b57..dd2d46f 100644
--- a/backend/model/mongoose/DatabaseManager.ts
+++ b/backend/model/mongoose/DatabaseManager.ts
@@ -1,53 +1,55 @@
///
-import * as mongoose from 'mongoose';
+import * as mongoose from "mongoose";
import {Schema} from "mongoose";
-export class DatabaseManager{
+
+export class DatabaseManager {
private static _instance:DatabaseManager = null;
private connectionError = false;
+ private errorObject = null;
+ private connectionOpen = false;
- constructor(onError?:(err)=>void,onConnected?:() =>void){
- mongoose.connection.on('error', function (err) {
- this.connectionError = true;
- if(onError){
- onError(err);
- }
- });
- mongoose.connection.on('connected', function () {
- if(onConnected){
- onConnected();
- }
- });
- try {
- mongoose.connect('mongodb://localhost/EQZT6L');
- }catch(ex){
- this.connectionError = true;
- if(onError){
- onError(ex);
- }
- }
+ constructor() {
+ mongoose.connect('mongodb://localhost/EQZT6L');
}
- public static getInstance(onError?:(err)=>void,onConnected?:() =>void){
- if(DatabaseManager._instance === null){
- DatabaseManager._instance = new DatabaseManager(onError,onConnected);
- }else{
- if(DatabaseManager._instance.connectionError === false && onConnected){
- onConnected();
- }
- }
+ public static getInstance(onError?:(err)=>void, onConnected?:() =>void) {
+ if (DatabaseManager._instance === null) {
+ DatabaseManager._instance = new DatabaseManager();
+ }
return DatabaseManager._instance;
}
- public getModel(name:string,schema:any){
- return mongoose.model(name,new Schema(schema));
+ public onConnectionError(onError:(err) => void){
+ if (this.connectionError === true) {
+ return onError(DatabaseManager._instance.errorObject);
+ }
+ mongoose.connection.once('error', (err) => {
+ this.connectionError = true;
+ this.errorObject = err;
+ onError(err);
+ });
+ }
+
+ public onConnected(onConnected:() => void){
+ if (this.connectionOpen === true) {
+ return onConnected();
+ }
+ mongoose.connection.once('open', (err) => {
+ this.connectionOpen = true;
+ onConnected();
+ });
}
- public disconnect(){
+ public getModel(name:string, schema:any) {
+ return mongoose.model(name, new Schema(schema));
+ }
+
+ public disconnect() {
mongoose.disconnect();
}
-
- public isConnectionError(){
+
+ public isConnectionError() {
return this.connectionError;
}
}
\ No newline at end of file
diff --git a/backend/server.ts b/backend/server.ts
index 0c7ee3a..7201561 100644
--- a/backend/server.ts
+++ b/backend/server.ts
@@ -1,20 +1,18 @@
///
-import * as _express from 'express';
-import * as _session from 'express-session';
-import * as _bodyParser from 'body-parser';
-import * as _debug from 'debug';
-import * as _http from 'http';
+import * as _express from "express";
+import * as _session from "express-session";
+import * as _bodyParser from "body-parser";
+import * as _debug from "debug";
+import * as _http from "http";
import {PublicRouter} from "./routes/PublicRouter";
import {UserRouter} from "./routes/UserRouter";
import {GalleryRouter} from "./routes/GalleryRouter";
-import {AdminRouter} from "./routes/AdminRouter";
+import {AdminRouter} from "./routes/AdminRouter";
import {ErrorRouter} from "./routes/ErrorRouter";
import {SharingRouter} from "./routes/SharingRouter";
import {Config, DatabaseType} from "./config/Config";
import {ObjectManagerRepository} from "./model/ObjectManagerRepository";
-import {MongoGalleryManager} from "./model/mongoose/MongoGalleryManager";
-import {MongoUserManager} from "./model/mongoose/MongoUserManager";
import {DatabaseManager} from "./model/mongoose/DatabaseManager";
@@ -25,14 +23,14 @@ export class Server {
private server:any;
private port:number;
- constructor(){
+ constructor() {
this.debug = _debug("PiGallery2:server");
this.app = _express();
this.app.set('view engine', 'ejs');
- if(process.env.DEBUG) {
+ if (process.env.DEBUG) {
var _morgan = require('morgan');
this.app.use(_morgan('dev'));
}
@@ -41,10 +39,10 @@ export class Server {
* Session above all
*/
this.app.use(_session({
- name:"pigallery2-session",
+ name: "pigallery2-session",
secret: 'PiGallery2 secret',
cookie: {
- maxAge: 60000*10,
+ maxAge: 60000 * 10,
httpOnly: false
},
resave: true,
@@ -57,31 +55,27 @@ export class Server {
// for parsing application/json
this.app.use(_bodyParser.json());
-
- if(Config.databaseType === DatabaseType.memory){
+
+ if (Config.databaseType === DatabaseType.memory) {
ObjectManagerRepository.MemoryMongoManagers();
- }else {
- if (DatabaseManager.getInstance(()=>{
+ } else {
+ ObjectManagerRepository.InitMongoManagers();
+ DatabaseManager.getInstance().onConnectionError(
+ ()=> {
console.error("MongoDB connection error. Falling back to memory Object Managers");
ObjectManagerRepository.MemoryMongoManagers();
- }).isConnectionError()) {
- console.error("MongoDB connection error. Falling back to memory Object Managers");
- ObjectManagerRepository.MemoryMongoManagers();
- } else {
- ObjectManagerRepository.InitMongoManagers();
- }
+ });
+
}
new PublicRouter(this.app);
-
+
new UserRouter(this.app);
new GalleryRouter(this.app);
new SharingRouter(this.app);
new AdminRouter(this.app);
-
- new ErrorRouter(this.app);
-
+ new ErrorRouter(this.app);
// Get PORT from environment and store in Express.
@@ -99,8 +93,6 @@ export class Server {
}
-
-
/**
* Event listener for HTTP server "error" event.
*/
@@ -143,8 +135,7 @@ export class Server {
}
-
-if(process.env.DEBUG) {
+if (process.env.DEBUG) {
console.log("Running in DEBUG mode");
}
diff --git a/test/backend/initMongo.ts b/test/backend/initMongo.ts
index dc156eb..5177b1c 100644
--- a/test/backend/initMongo.ts
+++ b/test/backend/initMongo.ts
@@ -1,35 +1,32 @@
-
import {MongoUserManager} from "../../backend/model/mongoose/MongoUserManager";
import {User, UserRoles} from "../../common/entities/User";
import {DatabaseManager} from "../../backend/model/mongoose/DatabaseManager";
-DatabaseManager.getInstance((err)=>{
+
+DatabaseManager.getInstance().onConnectionError(()=> {
DatabaseManager.getInstance().disconnect();
process.exit()
-},()=>{
- let userManager = new MongoUserManager();
- userManager.createUser(new User(0,"demo","demo",UserRoles.Developer),(err)=>{
- DatabaseManager.getInstance().disconnect();
- process.exit()
+});
+
+DatabaseManager.getInstance().onConnected(()=> {
+ let userManager = new MongoUserManager();
+ userManager.createUser(new User(0, "demo", "demo", UserRoles.Developer), (err)=> {
+
+ userManager.createUser(new User(1, "developer", "developer", UserRoles.Developer), (err)=> {
+
+ userManager.createUser(new User(2, "admin", "admin", UserRoles.Admin), (err)=> {
+
+ userManager.createUser(new User(3, "user", "user", UserRoles.User), (err)=> {
+
+ userManager.createUser(new User(4, "guest", "guest", UserRoles.Guest), (err)=> {
+
+ DatabaseManager.getInstance().disconnect();
+ process.exit()
+ });
+ });
+ });
+ });
});
- userManager.createUser(new User(1,"developer","developer",UserRoles.Developer),(err)=>{
- DatabaseManager.getInstance().disconnect();
- process.exit()
- });
- userManager.createUser(new User(2,"admin","admin",UserRoles.Admin),(err)=>{
- DatabaseManager.getInstance().disconnect();
- process.exit()
- });
-
- userManager.createUser(new User(3,"user","user",UserRoles.User),(err)=>{
- DatabaseManager.getInstance().disconnect();
- process.exit()
- });
-
- userManager.createUser(new User(4,"guest","guest",UserRoles.Guest),(err)=>{
- DatabaseManager.getInstance().disconnect();
- process.exit()
- });
});
\ No newline at end of file