-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.js
executable file
·141 lines (115 loc) · 5.2 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
136
137
138
139
140
141
(() => {
'use strict';
const express = require('express'),
logger = require('morgan'),
ejs = require('ejs'),
mongoose = require('mongoose'),
path = require('path'),
bodyParser = require('body-parser'),
cookieParser = require('cookie-parser'),
passport = require('passport'),
session = require('express-session'),
flash = require('connect-flash'),
staticFile = require('connect-static-file'),
babelMiddleware = require("babel-connect");
let app = express();
// Capturamos la variable de entorno NODE_ENV
const env = process.env.NODE_ENV || 'development';
app.locals.ENV = env;
app.locals.ENV_DEVELOPMENT = (env === 'development');
// Cargar la configuración de mongoose
var configDB = require('./config/database.js');
// Conectarse a mongo
mongoose.connect(configDB.url);
// Usamos cookieParser para guardar el inicio de sesión
app.use(cookieParser());
// Configurar la sesión de express
app.use(session({
secret: 'rafadaniproyecto', // Clave de seguridad para firmar las cookies
resave: false, // para no guardar la cookie en session store, crea condiciones de carrera
saveUninitialized: true // crea una sesión no inicializada en el navegador
}));
// Inicializa passport
app.use(passport.initialize());
// Para guardar las sesiones, usa el express-session
app.use(passport.session());
// Flash para enviar mensajes relacionados con la sesión
app.use(flash());
// Usar bodyParser como Middleware
app.use(bodyParser.urlencoded({
extended: true
}));
// Transforma la petición HTTP en un JSON
app.use(bodyParser.json());
// Motor de las vistas, que podría ser Jade, Mustache. Pero en la práctica vamos
// A usar EJS (EmbeddedJS)
app.set('view engine', 'ejs');
// Cargar helpers de EJS. Documentación: https://github.com/tanema/express-helpers/wiki
require('express-helpers')(app);
// Establecer la ruta de las vistas
app.set('views', __dirname + '/app/views');
// Establecer el modo del logger, TODO: mirar el modo producción
app.use(logger('dev'));
require('./config/passport')(passport);
require('./config/routes.js')(app, passport); //Cargar todas las rutas
// Usar el middleware de node-sass, para que compile en vivo y en directo
app.use(require('node-sass-middleware')({
src: path.join(__dirname, 'app/assets/stylesheets'), //TODO: arreglar esto
dest: path.join(__dirname, 'public'),
outputStyle: 'compressed',
sourceMap: false
}));
// Incluimos las dependencias ajenas
app.use('/jquery.js', staticFile(`${__dirname}/vendor/jquery/dist/jquery.js`));
app.use('/materialize.css', staticFile(`${__dirname}/vendor/Materialize/dist/css/materialize.min.css`));
app.use('/materialize.js', staticFile(`${__dirname}/vendor/Materialize/dist/js/materialize.min.js`));
app.use('/wNumb.js', staticFile(`${__dirname}/vendor/wnumb/wNumb.js`));
app.use('/nouislider.min.js', staticFile(`${__dirname}/vendor/Materialize/extras/noUiSlider/nouislider.min.js`));
app.use('/nouislider.css', staticFile(`${__dirname}/vendor/Materialize/extras/noUiSlider/nouislider.css`));
app.use('/underscore-min.js', staticFile(`${__dirname}/vendor/underscore/underscore-min.js`));
app.use('/underscore-min.map', staticFile(`${__dirname}/vendor/underscore/underscore-min.map`));
// Incluimos nuestras dependencias públicas
app.use(express.static(`${__dirname}/vendor/Materialize/dist`));
//app.use(express.static(`${__dirname}/app/assets/javascripts`));
app.use(express.static(`${__dirname}/app/assets/images`));
app.use(express.static(`${__dirname}/public`));
// Middleware para convertir a ECMA5
app.use(babelMiddleware({
options: {
// options to use when transforming files
},
src: "app/assets/javascripts",
dest: ".cache"
}));
app.use(express.static("cache"));
// Si se produce un error en la ruta, enviamos un not found
app.use((req, res, next) => {
let err = new Error('Not Found');
err.status = 404;
next(err); // Dejamos el error lo maneje una de dos funciones
});
// Si estamos en un entorno de desarrollo (que se pasa poniéndolo en la consola)
// Mostramos un error con la pila de llamadas para poder debugear
if (app.get('env') === 'development') {
app.use((err, req, res) => {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: err,
title: '¡ERROR!'
});
});
}
// En cualquier otro caso, suponemos que NO estamos en un entorno de desarrollo
// Por lo que iniciamos el modo producción, en el que no se muestra la pila de
// llamadas
app.use((err, req, res) => {
res.status(err.status || 500);
res.render('error', {
message: 'Esta página no existe :(',
error: {},
title: 'error'
});
});
module.exports = app;
})();