Commit | Line | Data |
---|---|---|
1d184b4c BA |
1 | var createError = require('http-errors'); |
2 | var express = require('express'); | |
3 | var path = require('path'); | |
4 | var cookieParser = require('cookie-parser'); | |
5 | var logger = require('morgan'); | |
6 | var sassMiddleware = require('node-sass-middleware'); | |
7 | var favicon = require('serve-favicon'); | |
8 | ||
1d184b4c BA |
9 | var app = express(); |
10 | ||
11 | app.use(favicon(path.join(__dirname, "public", "images", "favicon", "favicon.ico"))); | |
12 | ||
13 | if (app.get('env') === 'development') | |
14 | { | |
15 | // Full logging in development mode | |
16 | app.use(logger('dev')); | |
17 | } | |
18 | else | |
19 | { | |
92342261 BA |
20 | // http://dev.rdybarra.com/2016/06/23/Production-Logging-With-Morgan-In-Express/ |
21 | app.set('trust proxy', true); | |
1d184b4c BA |
22 | // In prod, only log error responses (https://github.com/expressjs/morgan) |
23 | app.use(logger('combined', { | |
24 | skip: function (req, res) { return res.statusCode < 400 } | |
25 | })); | |
26 | } | |
27 | ||
fb1ecbdf | 28 | // Allow layout.pug to select the right vue file: |
8d7e2786 | 29 | app.locals.development = (app.get('env') === 'development'); |
fb1ecbdf | 30 | |
1d184b4c BA |
31 | // view engine setup |
32 | app.set('views', path.join(__dirname, 'views')); | |
33 | app.set('view engine', 'pug'); | |
34 | ||
35 | app.use(express.json()); | |
36 | app.use(express.urlencoded({ extended: false })); | |
37 | app.use(cookieParser()); | |
38 | app.use(sassMiddleware({ | |
39 | src: path.join(__dirname, 'public'), | |
40 | dest: path.join(__dirname, 'public'), | |
41 | indentedSyntax: true, // true = .sass and false = .scss | |
42 | sourceMap: true | |
43 | })); | |
44 | app.use(express.static(path.join(__dirname, 'public'))); | |
45 | ||
8d7e2786 BA |
46 | // Before showing any page, check + save credentials |
47 | app.use(function(req, res, next) { | |
48 | req.loggedIn = false; | |
b57dbd12 | 49 | res.locals.user = { name: "" }; |
8d7e2786 BA |
50 | if (!req.cookies.token) |
51 | return next(); | |
52 | UserModel.getOne("sessionToken", req.cookies.token, function(err, user) { | |
53 | if (!!user) | |
54 | { | |
55 | req.loggedIn = true; | |
56 | res.locals.user = { | |
57 | _id: user._id, | |
58 | name: user.name, | |
59 | email: user.email, | |
60 | notify: user.notify, | |
61 | }; | |
62 | } | |
63 | next(); | |
64 | }); | |
65 | }); | |
66 | ||
67 | // Routing | |
298c42e6 BA |
68 | const routes = require(path.join(__dirname, "routes", "all")); |
69 | app.use('/', routes); | |
1d184b4c BA |
70 | |
71 | // catch 404 and forward to error handler | |
72 | app.use(function(req, res, next) { | |
73 | next(createError(404)); | |
74 | }); | |
75 | ||
76 | // error handler | |
77 | app.use(function(err, req, res, next) { | |
78 | // set locals, only providing error in development | |
79 | res.locals.message = err.message; | |
80 | res.locals.error = req.app.get('env') === 'development' ? err : {}; | |
81 | // render the error page | |
82 | res.status(err.status || 500); | |
83 | res.render('error'); | |
84 | }); | |
85 | ||
86 | module.exports = app; |