-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.js
135 lines (111 loc) · 4.5 KB
/
app.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
/**
* Main app here express dependencies are set and server is started
* @param routing callback router to handle route app
* @param localConf object with server, bdd and other conf
*/
function init(routing, localConf){
"use strict";
// Dependencies modules
const http = require('http');
const cors = require('cors');
const multer = require('multer');
const express = require('express');
const expressSession = require('express-session');
const cookieParser = require('cookie-parser');
const bodyParser = require('body-parser');
const passport = require('passport');
const nodemailer = require('nodemailer');
const LocalStrategy = require('passport-local').Strategy;
const path = require('path');
const methodOverride = require('method-override');
const fs = require('fs');
const handlebars = require('express-handlebars');
const MongoStore = require('connect-mongo')(expressSession);
const mongoose = require('mongoose');
mongoose.Promise = global.Promise;
const app = express();
// Express config
app.use( cookieParser(localConf.secrets.cookie) );
app.use( express.Router() );
app.use(bodyParser.json({limit: '50mb'}));
app.use(bodyParser.urlencoded({limit: '50mb', extended: true}));
app.disable('x-powered-by'); // disable x-powered-by
app.use( methodOverride('_method') );
app.use(cors()); // enable Cross-origin resource sharing
app.locals = localConf.locals;
// View configuration
// Set directories
app.set( 'views', path.join( __dirname,'app', 'views' ) );
app.set('layouts', path.join( app.get('views'), 'layouts'));
app.use( '/', express.static( path.join( __dirname, 'app', 'public' ) ) );
// Configure handlebars && Set as default engine, merge with global helpers
let hbsConf = Object.assign({helpers : require('./app/views/helpers/global')}, localConf.hbs);
app.engine('hbs', handlebars(hbsConf));
app.set('view engine', 'hbs');
app.enable('view cache');
// global vars
global.dbConnection = mongoose.connect(localConf.bdd.url());
global.moment = require('moment');
global.async = require('async');
global.crypto = require('crypto');
global.mkdirp = require('mkdirp');
global.slugify = require('slugify');
// Force moment to french local
require('moment-locale-fr');
// Session config
let session = expressSession({
secret: localConf.secrets.session,
store: new MongoStore({
mongooseConnection: mongoose.connection,
autoRemove: 'native', // Clean session in bdd
touchAfter: 12 * 3600 // Resave session only after 12 hours
}),
saveUninitialized : false, // Dont save session on initialisation
resave: false, // Dont resave every time client refresh
cookie: { secure: false,/* maxAge : 24 * 60 * 60*/ }
});
app.use(session);
// Passeport configuration
app.use(passport.initialize());
app.use(passport.session());
let Account = (require('./app/models/Users')).getMongooseModel();
passport.use(new LocalStrategy(Account.authenticate()));
passport.serializeUser(localConf.passport.serializeStrategy);
passport.deserializeUser(localConf.passport.serializeStrategy);
// Mailer configuration
if(localConf.mail){
const nodemailer = require('nodemailer');
global.mailTransporter = nodemailer.createTransport(localConf.mail);
}
/**
* Server start then routing then socket.io init
*/
http.createServer(app).listen(localConf.server.port, null, function() {
console.log('--- SERVER START --- AT',localConf.server.port, localConf.server.host );
routing(app);
app.socketIo = app.socketIoStart(this, app);
// Share session with socket
app.socketIo.use(function(socket, next) {
session(socket.handshake, {}, next);
});
});
/**
* Check if controler file exist && accessible
* @param controllerName
* @param callback
*/
app.getController = function(controllerName, callback){
fs.access( controllerName, function(err){
callback(err);
});
};
/**
* function to get Controller's name
* @param controller
* @returns {string}
*/
app.toControllerName = function(controller){
return controller.charAt(0).toUpperCase() + controller.slice(1) + 'Controller';
}
}
module.exports = init;