Added basic CDN file serving

This commit is contained in:
Jonathan Barrow
2021-08-22 18:24:32 -04:00
commit 3d9a93385c
11 changed files with 1343 additions and 0 deletions

56
src/server.js Normal file
View File

@@ -0,0 +1,56 @@
process.title = 'Pretendo - BOSS';
const express = require('express');
const morgan = require('morgan');
const logger = require('../logger');
const config = require('../config.json');
const { http: { port } } = config;
const app = express();
const nptsService = require('./services/npts');
// START APPLICATION
app.set('etag', false);
app.disable('x-powered-by');
// Create router
logger.info('Setting up Middleware');
app.use(morgan('dev'));
app.use(express.json());
app.use(express.urlencoded({
extended: true
}));
app.use(nptsService);
// 404 handler
logger.info('Creating 404 status handler');
app.use((request, response) => {
response.status(404);
response.json({
app: 'api',
status: 404,
error: 'Route not found'
});
});
// non-404 error handler
logger.info('Creating non-404 status handler');
app.use((error, request, response) => {
const status = error.status || 500;
response.status(status);
response.json({
app: 'api',
status,
error: error.message
});
});
// Starts the server
logger.info('Starting server');
app.listen(port, () => {
logger.success(`Server started on port ${port}`);
});

27
src/services/npts.js Normal file
View File

@@ -0,0 +1,27 @@
const path = require('path');
const fs = require('fs-extra');
const express = require('express');
const subdomain = require('express-subdomain');
// Router to handle the subdomain restriction
const npts = express.Router();
// Setup routes
npts.get('/p01/tasksheet/1/:id/:fileName', (request, response) => {
const { id, fileName } = request.params;
const tasksheetPath = path.normalize(`${__dirname}/../../cdn/tasksheet/${id}/${fileName}`);
if (fs.existsSync(tasksheetPath)) {
response.sendFile(tasksheetPath);
} else {
response.sendStatus(404);
}
});
// Main router for endpoints
const router = express.Router();
// Create subdomain
router.use(subdomain('npts.app', npts));
module.exports = router;