-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapp.js
More file actions
92 lines (75 loc) · 2.71 KB
/
app.js
File metadata and controls
92 lines (75 loc) · 2.71 KB
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
const express = require('express');
const morgan = require('morgan');
const bodyParser = require('body-parser');
const cors = require('cors');
const mongoose = require('mongoose');
const isProduction = process.env.NODE_ENV === 'production';
// Assegura que o servidor está rodando com node >= 7.6
const [major, minor] = process.versions.node.split('.').map(parseFloat);
if (major < 7 || (major === 7 && minor <= 5)) {
console.log(`
🛑 O servidor está rodando com Node.js em uma versão menor do que 7.6
Este projeto utiliza funções recentes do Node.js como async/await para lidar com código de execução assíncrona.
Por favor atualize a versão do Node.js para >= 7.6!
`);
process.exit();
}
// Importa as variáveis de ambiente do arquivo variables.env
// Variáveis podem ser acessadas através de process.env.NOME_DA_VARIAVEL
require('dotenv').config({ path: 'variables.env' });
// Conecta com o banco de dados e lida com problemas de conexão
mongoose.connect(process.env.DATABASE, { useMongoClient: true });
mongoose.Promise = global.Promise; // → queremos que o mongoose utilize promises ES6
mongoose.connection.on('error', err => {
console.error(`🙅 🚫 → ${err.message}`);
});
// Import todos os models do projeto para que possamos utilizar em qualquer parte do sistema
// Criar uma função utilitária no futuro que faz o require em todos os arquivos .js da pasta dominio
require('./models/User');
require('./models/PermissaoAcessoLab');
require('./models/AcessoLab');
require('./models/PresencaLab');
const app = express();
// Transforma as requisições do tipo raw em propriedades do request em req.body
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(cors());
// Biblioteca de logs
app.use(morgan('tiny'));
if (isProduction) {
app.set('trust proxy', true); // trust first proxy
}
// Requisita as rotas da api
app.use('/', require('./routes'));
/// catch 404 and forward to error handler
app.use(function(req, res, next) {
const err = new Error('Not Found');
err.status = 404;
next(err);
});
// development error handler
// will print stacktrace
if (!isProduction) {
app.use(function(err, req, res, next) {
console.log(err.stack);
res.status(err.status || 500);
res.json({'errors': {
message: err.message,
error: err
}});
});
}
// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.json({'errors': {
message: err.message,
error: {}
}});
});
// Inicializa o servidor
app.set('port', process.env.PORT || 8080);
const server = app.listen(app.get('port'), () => {
console.log(`Servidor rodando na porta: ${server.address().port}`);
});