-
Notifications
You must be signed in to change notification settings - Fork 5
/
app.js
92 lines (83 loc) · 3.11 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
/*[ Automatically open website when app is launched ] (true/false)*/
const autoOpen = true;
/*[ Imports ]*/
//Framework:
const express = require("express");
var session = require("express-session");
//Database:
const mongoose = require("mongoose");
require("dotenv").config(); //enables environment variables
const process = require("process");
const { DB } = process.env; //load db password from environment variables
//Aid:
const path = require("path");
const bodyParser = require("body-parser");
const errorController = require("./controllers/error.js"); //handle errors
const open = require("open"); //open page automatically when app launches
const { waitUntil } = require("./utils.js");
//Info:
const port = 3000;
const url = `http://localhost:${port}/`;
const info = `\u001b[2;36mInfo:\u001b[0m `; //info console color
const error = `\u001b[2;31mError:\u001b[0m `; //error console color
const urlColor = `\u001b[2;32m${url}\u001b[0m`; //url console color
const endMsg = `\t\u001b[2;30mpress Ctrl+C to exit\u001b[0m`;
const appLaunch = info + `\tLaunching app...`;
const appReady = info + `\tApp launched at ` + urlColor;
const appClose = info + `\tApp closed.`;
const dbConnecting = info + `\tConnecting to database...`;
const dbConnected = info + `\tDatabase connected.`;
const dbError =
error + `\tEncountered an error while connecting to database! Make sure that you stored your MongoDB connection string in .env`;
/*[ Initialize app ]*/
console.log(appLaunch);
const app = express();
app.set("view engine", "ejs"); //define engine
app.set("views", "views"); //define views location
/*[ Connect to database ]*/
let connected = null;
(async () => {
mongoose.set("strictQuery", true); //force to follow schema
console.log(dbConnecting);
try {
await mongoose.connect(DB).then(() => {
connected = true;
console.log(dbConnected);
});
} catch (error) {
connected = false;
console.log(error);
}
})();
/*[ Session support ]*/
app.use(session({ resave: false, saveUninitialized: false, secret: "session secret" }));
/*[ Define routes ]*/
const visitorRoutes = require("./routes/visitor");
const adminRoutes = require("./routes/admin");
const userRoutes = require("./routes/user");
/*[ Define aid tools ]*/
app.use(bodyParser.urlencoded({ extended: false }));
app.use(express.static(path.join(__dirname, "public"))); //define public folder
app.use("/images", express.static(path.join(__dirname, "public/images")));
/*[ Define paths to routes ]*/
app.use(visitorRoutes); //landing page
app.use("/admin", adminRoutes);
app.use("/user", userRoutes);
app.use(errorController.get404Page); //error page
/*[ Launch app ]*/
(async () => {
await waitUntil((_) => connected != null); //wait for all async functions to finish
if (!connected) return console.log(dbError); //don't launch if connection failed
//Launch:
app.listen(port);
if (autoOpen) open(url);
else console.log(appReady);
process.stdout.write(endMsg);
})();
/*[ Process events ]*/
process.on("SIGINT", (signal, code) => process.exit(128 + signal));
process.on("exit", (code) => {
process.stdout.clearLine(0);
process.stdout.cursorTo(0);
console.log(appClose);
});