1234567891011121314151617181920212223242526272829303132333435363738394041 |
- const http = require('http');
- const fs = require('fs');
- const port = 2222;
- const path = require('path');
- const public = path.join(__dirname, 'public');
- const htmlFile = 'public/index.html'; //Single page app file
- /* Allowed file types */
- const types = {
- txt: 'text/plain',
- json: 'text/json',
- css: 'text/css',
- gif: 'image/gif',
- jpg: 'image/jpeg',
- png: 'image/png',
- svg: 'image/svg+xml',
- ico: 'image/ico',
- js: 'application/javascript'
- };
- /* Simple media path validation for single page app */
- function getType(path) {
- if (path == '/' || path.indexOf(`.html`) != -1) return 'html';
- for (const type in types) {
- if (path.indexOf(`.${type}`) != -1) return type;
- }
- return false;
- }
- /* Server rules */
- const server = http.createServer((req, res) => {
- const path = req.url.toLowerCase();
- const mediaType = getType(path);
- if (! mediaType) res.writeHead(404).end('Not found');
- res.writeHead(200, {
- 'Cache-Control': 'max-age=31536000',
- 'Content-Type': mediaType == 'html' ? 'text/html' : types[mediaType]
- });
- const filePath = mediaType == 'html' ? htmlFile : public + path;
- res.end(fs.readFileSync(filePath));
- });
- server.listen(port, '127.0.0.1');
- console.info(`Server running on port ${port}`)
|