40 lines
1.2 KiB
TypeScript
40 lines
1.2 KiB
TypeScript
import express from 'express';
|
|
import path from 'path';
|
|
import { readdir } from 'node:fs/promises';
|
|
|
|
import { config } from './config';
|
|
|
|
const app = express();
|
|
|
|
async function loadPages(): Promise<void> {
|
|
try {
|
|
const pagesPath = path.join(__dirname, './pages');
|
|
const pagesFiles = path.basename(__filename).endsWith('.ts')
|
|
? (await readdir(pagesPath)).filter(file => file.endsWith('.ts'))
|
|
: (await readdir(pagesPath)).filter(file => file.endsWith('.js'));
|
|
for (const file of pagesFiles) {
|
|
const filePath = path.join(pagesPath, file);
|
|
const data = await import(filePath);
|
|
if (data.page !== undefined)
|
|
app.get(data.page.path, data.page.handleRequest);
|
|
else
|
|
console.error(`The page at ${filePath} is missing required properties.`);
|
|
}
|
|
} catch(err: unknown) { throw err; }
|
|
}
|
|
|
|
async function init() {
|
|
try {
|
|
await loadPages();
|
|
app.listen(config.port, () => {
|
|
console.log(`api server up, listen on ${config.port}`);
|
|
});
|
|
} catch(err: unknown) { throw err; }
|
|
}
|
|
|
|
try { init(); } catch(err: unknown) {
|
|
if (err instanceof Error)
|
|
console.error(`Error, ${err.message}`);
|
|
console.error(`Error, ${String(err)}`);
|
|
}
|