Spaces:
Sleeping
Sleeping
| import 'dotenv/config'; | |
| import express, { Request, Response, NextFunction } from 'express'; | |
| import marrowCellApi from './lib/marrow-cells/api'; | |
| import { readData, cellImages } from './lib/marrow-cells/data'; | |
| import cors from 'cors'; | |
| import { isBoom } from '@hapi/boom'; | |
| import { fileURLToPath } from 'url'; | |
| import { dirname, join } from 'path'; | |
| import { log } from './lib/helper'; | |
| const __filename = fileURLToPath(import.meta.url); | |
| const __dirname = dirname(__filename); | |
| const { PORT = 7860 } = process.env; | |
| const app = express(); | |
| // Enable cross-origin resource sharing | |
| app.use(cors()); | |
| // Middleware that parses json and looks at requests where the Content-Type header matches the type option. | |
| app.use(express.json()); | |
| // Serve API requests from the router | |
| app.use('/api/marrow-cells', marrowCellApi); | |
| // Serve app production bundle | |
| app.use(express.static('dist/app')); | |
| app.use((err: unknown, _req: Request, res: Response, next: NextFunction) => { | |
| if (res.headersSent) { | |
| return next(err); | |
| } | |
| if (isBoom(err)) { | |
| return res.status(err.output.statusCode).json(err.output.payload); | |
| } | |
| next(err); | |
| }); | |
| // Handle client routing, return all requests to the app | |
| app.get('*', (_req, res) => { | |
| res.sendFile(join(__dirname, 'app/index.html')); | |
| }); | |
| Promise.all([ | |
| (async () => { | |
| await readData(); | |
| log( | |
| `Marrow cells: ${ | |
| Object.keys(cellImages).length | |
| } cell types and ${Object.values(cellImages).reduce( | |
| (prev, curr) => prev + curr.length, | |
| 0 | |
| )} cell images loaded` | |
| ); | |
| })(), | |
| ]).then(() => { | |
| app.listen(PORT, () => { | |
| log(`Server listening at http://localhost:${PORT}`); | |
| }); | |
| }); | |