This repository has been archived by the owner on Dec 31, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathindex.js
93 lines (73 loc) · 2.29 KB
/
index.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
const path = require("path");
const fs = require("fs");
const express = require("express");
let app = express();
// MIDDLEWARE
const morgan = require("morgan");
const logger = morgan("dev");
const parser = require("express").Router();
parser.use(express.json());
parser.use(express.urlencoded({ extended: false }));
const cookieParser = require('cookie-parser');
const staticServe = express.static(path.join(__dirname, "public"));
// Should be the last middleware before the error handler for a 404
function error404(req, res, next) {
next({
status: 404,
message: `Could not ${req.method}/ on ${req._parsedUrl.pathname}`,
});
}
// Error handling routine (send json response for our application)
function errorHandler(err, req, res, next) {
console.log(err);
const apiError = req.url.startsWith("/api");
if (apiError) {
if (err) err.error = err.error || true;
res.status(err.status || 500).json(
err || {
error: true,
message: "Server error",
}
);
} else {
res.status(err.status || 500)
.render('error', { error: err });
}
}
function useRoutes(app, baseEndpoint, pathTo) {
fs.readdirSync(pathTo).forEach(file => {
app.use(baseEndpoint, require(path.join(pathTo, file)));
});
}
// SETUP
const { sequelize } = require("./models");
function setup(db) {
if (process.env.DATABASE_LOAD === 'force') {
return db.sync({ force: true });
}
if (process.env.DATABASE_LOAD === 'alter') {
return db.sync({ alter: true });
}
return db.sync();
}
// ejs template (for render.js)
app.set("views", path.join(__dirname, "views"));
app.set("view engine", "ejs");
// Global middlewares
app.use(staticServe);
app.use(logger);
app.use(parser);
app.use(cookieParser());
// All endpoints
useRoutes(app, "/api", path.join(__dirname, "routes/api"));
useRoutes(app, "/", path.join(__dirname, "routes/docs"));
useRoutes(app, "/mobile", path.join(__dirname, "routes/docs"));
useRoutes(app, "/admin", path.join(__dirname, "routes/admin"));
// Error handlers
app.use(error404);
app.use(errorHandler);
(async () => {
await setup(sequelize);
const port = Number(process.env.PORT) || 3001;
app.listen(port, () => console.log(`Listening on ${port}`));
})();