-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
71 lines (60 loc) · 2.34 KB
/
index.js
File metadata and controls
71 lines (60 loc) · 2.34 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
const { readdirSync } = require("fs");
const { createPool } = require("mysql");
const { getConfig, StartTasksManager, HttpServer, filterEndpointsByPath } = require("raraph84-lib");
const Config = getConfig(__dirname);
const tasks = new StartTasksManager();
const database = createPool({ ...Config.database, charset: "utf8mb4_general_ci" });
tasks.addTask((resolve, reject) => {
console.log("Connexion à la base de données...");
database.query("SELECT 0", async (error) => {
if (!error) {
console.log("Connecté à la base de données !");
resolve();
} else {
console.log("Impossible de se connecter à la base de données - " + error);
reject();
}
});
}, (resolve) => {
database.end();
resolve();
});
const api = new HttpServer();
api.on("request", async (/** @type {import("raraph84-lib/src/Request")} */ request) => {
const endpoints = filterEndpointsByPath(readdirSync(__dirname + "/src/endpoints")
.map((endpointFile) => require(__dirname + "/src/endpoints/" + endpointFile)), request);
request.setHeader("Access-Control-Allow-Origin", "*");
if (!endpoints[0]) {
request.end(404, "Not found");
return;
}
if (request.method === "OPTIONS") {
request.setHeader("Access-Control-Allow-Methods", endpoints.map((endpoint) => endpoint.infos.method).join(","));
if (request.headers["access-control-request-headers"])
request.setHeader("Access-Control-Allow-Headers", request.headers["access-control-request-headers"]);
request.setHeader("Vary", "Access-Control-Request-Headers");
request.end(204);
return;
}
const endpoint = endpoints.find((endpoint) => endpoint.infos.method === request.method);
if (!endpoint) {
request.end(405, "Method not allowed");
return;
}
request.urlParams = endpoint.params;
endpoint.run(request, database);
});
tasks.addTask((resolve, reject) => {
console.log("Lancement du serveur HTTP...");
api.listen(Config.apiPort).then(() => {
console.log("Serveur HTTP lancé sur le port " + Config.apiPort + " !");
resolve();
}).catch((error) => {
console.log("Impossible de lancer le serveur HTTP - " + error);
reject();
});
}, (resolve) => {
api.close();
resolve();
});
tasks.run();