From c5da9f3265a4a3e363253877d4ff5c98406ff3a2 Mon Sep 17 00:00:00 2001 From: Nikiroy78 Date: Sun, 19 Mar 2023 14:01:35 +0300 Subject: [PATCH] upload server into github --- .gitignore | 3 +-- command-executor.js | 28 ++++++++++++++++++++++++++++ init.txt | 1 + package-lock.json | 33 +++++++++++++++++++++++++-------- package.json | 3 ++- readme.md | 4 ++++ server.js | 30 +++++++++++++++++++++++++++++- 7 files changed, 90 insertions(+), 12 deletions(-) create mode 100644 command-executor.js create mode 100644 init.txt create mode 100644 readme.md diff --git a/.gitignore b/.gitignore index 7569e93..40b878d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1 @@ -node_modules/ -root/*.* \ No newline at end of file +node_modules/ \ No newline at end of file diff --git a/command-executor.js b/command-executor.js new file mode 100644 index 0000000..9e40439 --- /dev/null +++ b/command-executor.js @@ -0,0 +1,28 @@ +const fs = require('fs'); +const mime = require('mime'); + +const route = (app, options, path, facticalPath) => { + app.get(path, async (req, res) => { + let data = fs.readFileSync(`./root${facticalPath}`); + let mimeType = mime.getType(`./root${facticalPath}`); + + res.set('Content-Type', mimeType); + res.send(data); + }); +} + +module.exports = (app, options) => ({ + exec : (command) => { + switch (command.split(' ')[0]) { + case '': + return; + case 'route': + return route(app, options, + command.split(' ')[1], + command.split(' ')[2] + ); + default: + throw new Error(`Unknown command: ${command.split(' ')[0]}`); + } + } +}); \ No newline at end of file diff --git a/init.txt b/init.txt new file mode 100644 index 0000000..dd7a9fb --- /dev/null +++ b/init.txt @@ -0,0 +1 @@ +route /page /page.html \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index c2f66dc..d2da9a3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,7 +5,8 @@ "packages": { "": { "dependencies": { - "express": "^4.18.2" + "express": "^4.18.2", + "mime": "^3.0.0" } }, "node_modules/accepts": { @@ -326,14 +327,14 @@ } }, "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", "bin": { "mime": "cli.js" }, "engines": { - "node": ">=4" + "node": ">=10.0.0" } }, "node_modules/mime-db": { @@ -495,6 +496,17 @@ "node": ">= 0.8.0" } }, + "node_modules/send/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/send/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -830,9 +842,9 @@ "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" }, "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==" }, "mime-db": { "version": "1.52.0", @@ -943,6 +955,11 @@ "statuses": "2.0.1" }, "dependencies": { + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, "ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", diff --git a/package.json b/package.json index 0e6cd98..46e640b 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,6 @@ { "dependencies": { - "express": "^4.18.2" + "express": "^4.18.2", + "mime": "^3.0.0" } } diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..4045c0b --- /dev/null +++ b/readme.md @@ -0,0 +1,4 @@ +## List of commands (init.txt) +``` +route | Routing to path with file +``` \ No newline at end of file diff --git a/server.js b/server.js index e4ae8e2..9ba604c 100644 --- a/server.js +++ b/server.js @@ -1,10 +1,38 @@ const express = require('express'); +const fs = require('fs'); var app = express(); -app.use(express.static('root')); const port = !process.argv[2] ? 3000 : Number.isInteger(Number(process.argv[2])) ? Number(process.argv[2]) : 3000 +fs.readFile("./init.txt", "utf8", async (err, data) => { + if (err) { + throw err; + } + else { + // console.log(data); + let commands = data.split('\n'); + let options = { + // dotfiles: 'ignore', + // etag: false, + // extensions: ['htm', 'html'], + // index: "index.html", + // maxAge: '1d', + // redirect: true, + // setHeaders: async (res, path, stat) => { + // res.set('ЗАГОЛОВОК', ДАННЫЕ) СДЕЛАЕМ ПОЗЖЕ + // } + }; + let executor = require('./command-executor')(app, options); + + for (let command of commands) { + executor.exec(command); + } + + app.use(express.static('root', options)); + } +}); + app.listen( port, (err) => { if (err) throw err;