dynamically import routes
This commit is contained in:
parent
491e492206
commit
e8ed9fc3b8
24
src/main.js
24
src/main.js
@ -33,29 +33,7 @@ global.server = app.listen(global.db.listenPort, () => {
|
|||||||
console.log(`proxmoxaas-api v${global.api.version} listening on port ${global.db.listenPort}`);
|
console.log(`proxmoxaas-api v${global.api.version} listening on port ${global.db.listenPort}`);
|
||||||
});
|
});
|
||||||
|
|
||||||
import("./routes/auth.js").then((module) => {
|
global.utils.recursiveImport(app, "/api", "routes");
|
||||||
app.use("/api/auth", module.router);
|
|
||||||
});
|
|
||||||
|
|
||||||
import("./routes/cluster.js").then((module) => {
|
|
||||||
app.use("/api/cluster", module.router);
|
|
||||||
});
|
|
||||||
|
|
||||||
import("./routes/global.js").then((module) => {
|
|
||||||
app.use("/api/global", module.router);
|
|
||||||
});
|
|
||||||
|
|
||||||
import("./routes/proxmox.js").then((module) => {
|
|
||||||
app.use("/api/proxmox", module.router);
|
|
||||||
});
|
|
||||||
|
|
||||||
import("./routes/sync.js").then((module) => {
|
|
||||||
app.use("/api/sync", module.router);
|
|
||||||
});
|
|
||||||
|
|
||||||
import("./routes/user.js").then((module) => {
|
|
||||||
app.use("/api/user", module.router);
|
|
||||||
});
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* GET - get API version
|
* GET - get API version
|
||||||
|
@ -16,17 +16,7 @@ const vmidRegexP = "\\d+";
|
|||||||
|
|
||||||
const basePath = `/:node(${nodeRegexP})/:type(${typeRegexP})/:vmid(${vmidRegexP})`;
|
const basePath = `/:node(${nodeRegexP})/:type(${typeRegexP})/:vmid(${vmidRegexP})`;
|
||||||
|
|
||||||
import("./cluster/disk.js").then((module) => {
|
global.utils.recursiveImport(router, basePath, "cluster", import.meta.url);
|
||||||
router.use(`${basePath}/disk`, module.router);
|
|
||||||
});
|
|
||||||
|
|
||||||
import("./cluster/net.js").then((module) => {
|
|
||||||
router.use(`${basePath}/net`, module.router);
|
|
||||||
});
|
|
||||||
|
|
||||||
import("./cluster/pci.js").then((module) => {
|
|
||||||
router.use(`${basePath}/pci`, module.router);
|
|
||||||
});
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* GET - get available pcie devices given node and user
|
* GET - get available pcie devices given node and user
|
||||||
|
28
src/utils.js
28
src/utils.js
@ -1,4 +1,7 @@
|
|||||||
import { createHash } from "crypto";
|
import { createHash } from "crypto";
|
||||||
|
import path from 'path';
|
||||||
|
import url from 'url';
|
||||||
|
import * as fs from "fs";
|
||||||
|
|
||||||
import { getUsedResources, requestPVE } from "./pve.js";
|
import { getUsedResources, requestPVE } from "./pve.js";
|
||||||
|
|
||||||
@ -116,3 +119,28 @@ export function getObjectHash (object, alg = "sha256", format = "hex") {
|
|||||||
export function getTimeLeft (timeout) {
|
export function getTimeLeft (timeout) {
|
||||||
return Math.ceil((timeout._idleStart + timeout._idleTimeout - (global.process.uptime() * 1000)));
|
return Math.ceil((timeout._idleStart + timeout._idleTimeout - (global.process.uptime() * 1000)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Recursively import routes from target folder.
|
||||||
|
* @param {Object} router or app object.
|
||||||
|
* @param {string} baseroute API route for each imported module.
|
||||||
|
* @param {string} target folder to import modules.
|
||||||
|
* @param {string} from source folder of calling module, optional for imports from the same base directory.
|
||||||
|
*/
|
||||||
|
export function recursiveImport (router, baseroute, target, from = import.meta.url) {
|
||||||
|
const thisPath = path.dirname(url.fileURLToPath(import.meta.url));
|
||||||
|
const fromPath = path.relative(".", path.dirname(url.fileURLToPath(from)));
|
||||||
|
const targetPath = path.relative(".", `${fromPath}/${target}`);
|
||||||
|
const importPath = path.relative(thisPath, targetPath);
|
||||||
|
const files = fs.readdirSync(targetPath);
|
||||||
|
files.forEach((file) => {
|
||||||
|
if (file.endsWith(".js")) {
|
||||||
|
const path = `./${importPath}/${file}`;
|
||||||
|
const route = `${baseroute}/${file.replace(".js", "")}`
|
||||||
|
import(path).then((module) => {
|
||||||
|
router.use(route, module.router);
|
||||||
|
});
|
||||||
|
console.log(`routes: loaded ${path} as ${route}`);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user