-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapp.js
More file actions
117 lines (95 loc) · 2.81 KB
/
app.js
File metadata and controls
117 lines (95 loc) · 2.81 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
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
/**
* Import libraries, routers, controllers, database connection
*/
// Import Libraries
const express = require('express');
const cors = require('cors');
const helmet = require('helmet');
const path = require('path')
const rfs = require('rotating-file-stream')
const morgan = require('morgan');
const Auth = require('./middleware/auth');
// Configure environment variables
require("dotenv").config()
// Import Database
const connectDB = require('./config/database');
// Import Routes
const { RoutesWithOuthJWT, RoutesWithJWT } = require("./config/routes");
// Set up Express
const app = express();
/**
*--------- GENERAL SETUP -------------
*/
// Morgan Logger
app.use(morgan('dev'));
// Morgan Logger Save
var accessLogStream = rfs.createStream("access.log", {
interval: "1d", // rotate daily
path: path.join(__dirname, "log"),
});
app.use(morgan("combined", { stream: accessLogStream }));
// Connect to Database
connectDB()
// Express body-parser
app.use(express.json({ limit: '50mb' }));
app.use(express.urlencoded({ extended: true }));
// Set up helmet
app.use(helmet());
// Set up cors - GET, POST, PUT, PATCH, and other REQUEST
app.use(cors({
methods: ['GET', 'POST', 'DELETE', 'UPDATE', 'PUT', 'PATCH']
}));
// Set up Routers
RoutesWithJWT.forEach((route) => {
try {
app.use(route.route, Auth, route.function);
console.log("Created route:", route.name, "on works: http://" + process.env.SERVER_HOST + ":" + process.env.SERVER_PORT + route.route);
} catch (err) {
console.log(err);
console.error("Error while adding route:", route.name);
}
});
RoutesWithOuthJWT.forEach((route) => {
try {
app.use(route.route, route.function);
console.log("Created route:", route.name, "on works: http://" + process.env.SERVER_HOST + ":" + process.env.SERVER_PORT + route.route);
} catch (err) {
console.log(err);
console.error("Error while adding route:", route.name);
}
});
app.use((req, res, next) => {
const error = new Error('Not found');
error.message = 'Invalid route';
error.status = 404;
next(error);
});
// log errors to console
app.use(logErrors);
//
app.use(clientErrorHandler);
app.use((error, req, res, next) => {
res.status(error.status || 500);
return res.json({
status: error.status || 500,
message: error.message,
error: {
error: error.message,
},
});
});
// log errors to console
function logErrors(err, req, res, next) {
console.error(err.stack);
next(err);
}
// error handling for xhr request
function clientErrorHandler(err, req, res, next) {
if (req.xhr) {
//console.log('xhr request');
res.status(400).send({ status: 400, message: "Bad request from client", error: err.message });
} else {
next(err);
}
}
module.exports = app;