|
1 | | -import express from "express" |
2 | | -const app = express() |
3 | | - |
4 | | -const port = process.env.PORT || 3000 |
5 | | - |
6 | | -app.use(express.static("public")) |
7 | | -app.set("view engine", "ejs") |
8 | | - |
9 | | -app.use(express.json()) |
10 | | -app.use(express.urlencoded({ extended: true })) |
11 | | - |
12 | | -import { settings } from "./config/settings.js" |
13 | | -const { siteTitle, searchFeature, menuLinks, footerCopyright } = settings |
| 1 | +import { initializeApp } from "./functions/initialize.js" |
| 2 | +import { staticAssetLoader } from "./functions/static-asset-loader.js" |
| 3 | +import { createServer } from "velocy" |
| 4 | +import { drive } from "./functions/deta-drive.js" |
| 5 | + |
| 6 | +// Initialize application |
| 7 | +const { app } = initializeApp() |
| 8 | +// Set the port value |
| 9 | +const port = process.env.PORT || 8080 |
| 10 | +// Load static assets from `static` folder in Blog-Doc App |
| 11 | +staticAssetLoader.serveStaticAssets(app) |
| 12 | + |
| 13 | +// Load static assets from Blog-Doc Drive |
| 14 | +import { staticAssetRoute } from "./routes/staticAssetRoute.js" |
| 15 | +staticAssetRoute(app) |
| 16 | + |
| 17 | +// Entry Route Depending On Drive's Content |
| 18 | +import { mainRoute } from "./routes/mainRoute.js" |
| 19 | +import { adminBlogDocConfigRoute } from "./routes/admin/adminBlogDocConfigRoute.js" |
| 20 | +async function entryRoute() { |
| 21 | + let allFiles = (await drive.list()).names.length |
| 22 | + if (allFiles == 0) { |
| 23 | + adminBlogDocConfigRoute(app) |
| 24 | + } else { |
| 25 | + mainRoute(app) |
| 26 | + } |
| 27 | +} |
| 28 | +await entryRoute() |
14 | 29 |
|
15 | | -// Admin routes |
| 30 | +// Administration Routes |
16 | 31 | import { adminRoutes, adminUpdateDelete } from "./routes/admin/adminRoute.js" |
17 | | -import { adminConfigRoute } from "./routes/admin/adminConfigRoute.js" |
18 | 32 | import { adminCreateRoute } from "./routes/admin/adminCreateRoute.js" |
19 | 33 | import { adminGalleryRoute } from "./routes/admin/adminGalleryRoute.js" |
20 | | -import { adminBuildAndDownloadRoute } from "./routes/admin/adminBuildAndDownloadRoute.js" |
21 | | -app.use( |
22 | | - [adminRoutes, adminUpdateDelete, adminConfigRoute, adminCreateRoute, adminGalleryRoute, adminBuildAndDownloadRoute], |
23 | | - (req, res, next) => { |
24 | | - next() |
25 | | - } |
26 | | -) |
27 | | - |
28 | | -// Search route |
29 | | -import { searchRoute } from "./routes/searchRoute.js" |
30 | | -if (searchFeature) app.use("/", searchRoute) |
| 34 | +import { adminConfigRoute } from "./routes/admin/adminConfigRoute.js" |
| 35 | +adminRoutes(app) |
| 36 | +adminCreateRoute(app) |
| 37 | +adminUpdateDelete(app) |
| 38 | +adminGalleryRoute(app) |
| 39 | +adminConfigRoute(app) |
31 | 40 |
|
32 | 41 | // Routes |
33 | | -import { mainRoute } from "./routes/mainRoute.js" |
34 | | -import { filesRoute } from "./routes/filesRoute.js" |
35 | | -import { tagsRoute } from "./routes/tagsRoute.js" |
| 42 | +import { markdownRoute } from "./routes/markdownRoute.js" |
36 | 43 | import { archiveRoute } from "./routes/archiveRoute.js" |
| 44 | +import { searchRoute } from "./routes/searchRoute.js" |
| 45 | +import { tagsRoute } from "./routes/tagsRoute.js" |
37 | 46 | import { rssRoute } from "./routes/rssRoute.js" |
38 | 47 | import { sitemapRoute } from "./routes/sitemapRoute.js" |
39 | | - |
40 | | -app.use([mainRoute, archiveRoute, rssRoute, sitemapRoute, tagsRoute, filesRoute], (req, res, next) => { |
41 | | - next() |
42 | | -}) |
43 | | - |
44 | | -// 404 route |
45 | | -app.use((req, res, next) => { |
46 | | - const titles = { |
47 | | - siteTitle: siteTitle, |
48 | | - docTitle: "Page Not Found", |
49 | | - docDescription: "The server cannot find the requested resource", |
50 | | - subTitle: "Nothing to land on here !", |
51 | | - } |
52 | | - res.status(404).render("layouts/base", { |
53 | | - errorRoute: true, |
54 | | - links: menuLinks, |
55 | | - titles: titles, |
56 | | - imageSrc: "/images/404-not-found-error.png", |
57 | | - imageAlt: "Sailor on a 404 mast looking out to sea", |
58 | | - footerCopyright: footerCopyright, |
59 | | - }) |
60 | | -}) |
61 | | - |
62 | | -// 500 route |
63 | | -app.use((err, req, res, next) => { |
64 | | - console.error(err.stack) |
65 | | - const titles = { |
66 | | - siteTitle: siteTitle, |
67 | | - docTitle: "Internal Server Error", |
68 | | - docDescription: "The server encountered an unexpected condition that prevented it from fulfilling the request", |
69 | | - subTitle: "Server is on a break here !", |
70 | | - } |
71 | | - res.status(500).render("layouts/base", { |
72 | | - errorRoute: true, |
73 | | - links: menuLinks, |
74 | | - titles: titles, |
75 | | - imageSrc: "/images/500-internal-server-error.png", |
76 | | - imageAlt: "Sad robot in front of empty box", |
77 | | - footerCopyright: footerCopyright, |
78 | | - }) |
79 | | -}) |
80 | | - |
81 | | -app.listen(port, () => { |
82 | | - console.log(`App 🚀 @ http://localhost:${port}`) |
| 48 | +markdownRoute(app) |
| 49 | +archiveRoute(app) |
| 50 | +searchRoute(app) |
| 51 | +tagsRoute(app) |
| 52 | +rssRoute(app) |
| 53 | +sitemapRoute(app) |
| 54 | + |
| 55 | +import { errorRoute } from "./routes/errorRoute.js" |
| 56 | +errorRoute(app) |
| 57 | + |
| 58 | +createServer(app).listen(port, () => { |
| 59 | + console.log(`App @ http://localhost:${port}`) |
83 | 60 | }) |
0 commit comments