From 1d621ea239c396f5e862ce5cd7d3ffe7ef9ec068 Mon Sep 17 00:00:00 2001 From: LordMathis Date: Sat, 7 Dec 2019 21:36:53 +0100 Subject: [PATCH] Unify DataHolder and DataGetter --- package.json | 1 + src/server.js | 6 +- src/utils/dataGetter.js | 47 --------------- src/utils/dataHolder.js | 53 +++++++++++++++-- src/utils/serverRender.js | 6 +- yarn.lock | 120 +++++++++++++++++++++++++++++++++++++- 6 files changed, 174 insertions(+), 59 deletions(-) delete mode 100644 src/utils/dataGetter.js diff --git a/package.json b/package.json index 67d54e7..d801da8 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "jsonfile": "^5.0.0", "markdown-it": "^10.0.0", "moment": "^2.24.0", + "mongoose": "^5.7.14", "morgan": "^1.9.1", "node-sass": "^4.9.0", "prop-types": "^15.7.2", diff --git a/src/server.js b/src/server.js index 837a4db..82e0440 100644 --- a/src/server.js +++ b/src/server.js @@ -7,7 +7,6 @@ import chokidar from 'chokidar' import jsonfile from 'jsonfile' import { ServerRenderer } from './utils/serverRender' import { Scanner } from './utils/scanner' -import { DataGetter } from './utils/dataGetter' import { DataHolder } from './utils/dataHolder' const port = process.env.PORT || 3000 @@ -19,7 +18,7 @@ if (config == null) { throw new Error('Config file not found!') } -const dataHolder = new DataHolder() +const dataHolder = new DataHolder(config) const scanner = new Scanner(config, dataHolder) const watcher = chokidar.watch(path.join(process.cwd(), 'content'), { @@ -68,8 +67,7 @@ if (head == null) { } } -const dataGetter = new DataGetter(config, dataHolder) -const serverRenderer = new ServerRenderer(head, config, dataGetter) +const serverRenderer = new ServerRenderer(head, config, dataHolder) app.get('*', serverRenderer.render.bind(serverRenderer)) app.listen(port, function (error) { diff --git a/src/utils/dataGetter.js b/src/utils/dataGetter.js deleted file mode 100644 index fead96f..0000000 --- a/src/utils/dataGetter.js +++ /dev/null @@ -1,47 +0,0 @@ -import fs from 'fs' -import jsonfile from 'jsonfile' -import path from 'path' - -export class DataGetter { - constructor (config, dataHolder) { - this.config = config - this.dataHolder = dataHolder - } - - getData (reqPath) { - if (this.config.storage === 'file') { - return this.getDataFromFile(reqPath) - } - } - - getDataFromFile (reqPath) { - if (reqPath === '') { - return Promise.resolve(this.dataHolder.data) - } else if (reqPath === 'resume') { - const fileName = path.join(process.cwd(), 'content', reqPath + '.md') - return this.readFile(fileName, 'resume', 'utf8') - } else { - const fileName = path.join(process.cwd(), 'content', reqPath + '.md') - return this.readFile(fileName, 'post', 'utf8') - } - } - - readFile (fileName, type, options) { - return new Promise(function (resolve, reject) { - fs.readFile(fileName, options, (err, data) => { - err ? reject(err) : resolve({ - type: type, - data: data - }) - }) - }) - } - - readJson (dataPath) { - return new Promise(function (resolve, reject) { - jsonfile.readFile(dataPath, (err, data) => { - err ? reject(err) : resolve(data) - }) - }) - } -} diff --git a/src/utils/dataHolder.js b/src/utils/dataHolder.js index cb0b02e..7ef0fbd 100644 --- a/src/utils/dataHolder.js +++ b/src/utils/dataHolder.js @@ -1,11 +1,56 @@ +import fs from 'fs' +import jsonfile from 'jsonfile' +import path from 'path' + export class DataHolder { - constructor () { - this.data = { - posts: [], - other: {} + constructor (config) { + this.config = config + + if (this.config.storage === 'file') { + this.data = { + posts: [], + other: {} + } } } + getData (reqPath) { + if (this.config.storage === 'file') { + return this.getDataFromFile(reqPath) + } + } + + getDataFromFile (reqPath) { + if (reqPath === '') { + return Promise.resolve(this.data) + } else if (reqPath === 'resume') { + const fileName = path.join(process.cwd(), 'content', reqPath + '.md') + return this.readFile(fileName, 'resume', 'utf8') + } else { + const fileName = path.join(process.cwd(), 'content', reqPath + '.md') + return this.readFile(fileName, 'post', 'utf8') + } + } + + readFile (fileName, type, options) { + return new Promise(function (resolve, reject) { + fs.readFile(fileName, options, (err, data) => { + err ? reject(err) : resolve({ + type: type, + data: data + }) + }) + }) + } + + readJson (dataPath) { + return new Promise(function (resolve, reject) { + jsonfile.readFile(dataPath, (err, data) => { + err ? reject(err) : resolve(data) + }) + }) + } + addPost (post) { this.data.posts.push(post) } diff --git a/src/utils/serverRender.js b/src/utils/serverRender.js index 0090a74..c74fea8 100644 --- a/src/utils/serverRender.js +++ b/src/utils/serverRender.js @@ -7,10 +7,10 @@ import serialize from 'serialize-javascript' import manifest from '../../public/static/manifest.json' export class ServerRenderer { - constructor (head, config, dataGetter) { + constructor (head, config, dataHolder) { this.head = head this.config = config - this.dataGetter = dataGetter + this.dataHolder = dataHolder } render (req, res, next) { @@ -27,7 +27,7 @@ export class ServerRenderer { ) res.status(404).send(renderFullPage(markup, head, {}, config)) } else { - const promise = this.dataGetter.getData(req.path.split('/').pop()) + const promise = this.dataHolder.getData(req.path.split('/').pop()) promise.then((data) => { const context = [data, config] diff --git a/yarn.lock b/yarn.lock index fffd419..c99e440 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1379,6 +1379,11 @@ block-stream@*: dependencies: inherits "~2.0.0" +bluebird@3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" + integrity sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA== + bluebird@^3.5.5: version "3.5.5" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.5.tgz#a8d0afd73251effbbd5fe384a77d73003c17a71f" @@ -1532,6 +1537,11 @@ browserslist@^4.0.0, browserslist@^4.6.0, browserslist@^4.6.6: electron-to-chromium "^1.3.247" node-releases "^1.1.29" +bson@^1.1.1, bson@~1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/bson/-/bson-1.1.3.tgz#aa82cb91f9a453aaa060d6209d0675114a8154d3" + integrity sha512-TdiJxMVnodVS7r0BdL42y/pqC9cL2iKynVwA0Ho3qbsQYr428veL3l7BQyuqiw+Q5SqqoT0m4srSY/BlZ9AxXg== + buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" @@ -2405,6 +2415,13 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: dependencies: ms "2.0.0" +debug@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + debug@^3.2.6: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" @@ -4618,6 +4635,11 @@ jsx-ast-utils@^2.1.0: array-includes "^3.0.3" object.assign "^4.1.0" +kareem@2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/kareem/-/kareem-2.3.1.tgz#def12d9c941017fabfb00f873af95e9c99e1be87" + integrity sha512-l3hLhffs9zqoDe8zjmb/mAN4B8VT3L56EUvKNqLFVs9YlFA+zx7ke1DO8STAdDyYNkeSo1nKmjuvQeI12So8Xw== + kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" @@ -4912,6 +4934,11 @@ memory-fs@^0.4.0, memory-fs@^0.4.1: errno "^0.1.3" readable-stream "^2.0.1" +memory-pager@^1.0.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/memory-pager/-/memory-pager-1.5.0.tgz#d8751655d22d384682741c972f2c3d6dfa3e66b5" + integrity sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg== + meow@^3.7.0: version "3.7.0" resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" @@ -5094,6 +5121,39 @@ moment@^2.24.0: resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b" integrity sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg== +mongodb@3.3.5: + version "3.3.5" + resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-3.3.5.tgz#38d531013afede92b0dd282e3b9f3c08c9bdff3b" + integrity sha512-6NAv5gTFdwRyVfCz+O+KDszvjpyxmZw+VlmqmqKR2GmpkeKrKFRv/ZslgTtZba2dc9JYixIf99T5Gih7TIWv7Q== + dependencies: + bson "^1.1.1" + require_optional "^1.0.1" + safe-buffer "^5.1.2" + optionalDependencies: + saslprep "^1.0.0" + +mongoose-legacy-pluralize@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz#3ba9f91fa507b5186d399fb40854bff18fb563e4" + integrity sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ== + +mongoose@^5.7.14: + version "5.7.14" + resolved "https://registry.yarnpkg.com/mongoose/-/mongoose-5.7.14.tgz#1e9be2b561b6f4e3fad9d4b2a4f0de14f02a785f" + integrity sha512-fF+7+7Xl856VQRwRl1/pc/sL3eblWnaYO1K0Yp3d7v+53e5dMJDg3b1Iz61Fk1PBbJF2Z39yGyxakj59lLoj0w== + dependencies: + bson "~1.1.1" + kareem "2.3.1" + mongodb "3.3.5" + mongoose-legacy-pluralize "1.0.2" + mpath "0.6.0" + mquery "3.2.2" + ms "2.1.2" + regexp-clone "1.0.0" + safe-buffer "5.1.2" + sift "7.0.1" + sliced "1.0.1" + morgan@^1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.9.1.tgz#0a8d16734a1d9afbc824b99df87e738e58e2da59" @@ -5117,6 +5177,22 @@ move-concurrently@^1.0.1: rimraf "^2.5.4" run-queue "^1.0.3" +mpath@0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/mpath/-/mpath-0.6.0.tgz#aa922029fca4f0f641f360e74c5c1b6a4c47078e" + integrity sha512-i75qh79MJ5Xo/sbhxrDrPSEG0H/mr1kcZXJ8dH6URU5jD/knFxCVqVC/gVSW7GIXL/9hHWlT9haLbCXWOll3qw== + +mquery@3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/mquery/-/mquery-3.2.2.tgz#e1383a3951852ce23e37f619a9b350f1fb3664e7" + integrity sha512-XB52992COp0KP230I3qloVUbkLUxJIu328HBP2t2EsxSFtf4W1HPSOBWOXf1bqxK4Xbb66lfMJ+Bpfd9/yZE1Q== + dependencies: + bluebird "3.5.1" + debug "3.1.0" + regexp-clone "^1.0.0" + safe-buffer "5.1.2" + sliced "1.0.1" + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -5127,7 +5203,7 @@ ms@2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== -ms@^2.1.1: +ms@2.1.2, ms@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== @@ -6668,6 +6744,11 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" +regexp-clone@1.0.0, regexp-clone@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/regexp-clone/-/regexp-clone-1.0.0.tgz#222db967623277056260b992626354a04ce9bf63" + integrity sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw== + regexp-tree@^0.1.13: version "0.1.13" resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.13.tgz#5b19ab9377edc68bc3679256840bb29afc158d7f" @@ -6806,6 +6887,14 @@ require-main-filename@^2.0.0: resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== +require_optional@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require_optional/-/require_optional-1.0.1.tgz#4cf35a4247f64ca3df8c2ef208cc494b1ca8fc2e" + integrity sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g== + dependencies: + resolve-from "^2.0.0" + semver "^5.1.0" + resolve-cwd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" @@ -6821,6 +6910,11 @@ resolve-dir@^1.0.0, resolve-dir@^1.0.1: expand-tilde "^2.0.0" global-modules "^1.0.0" +resolve-from@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57" + integrity sha1-lICrIOlP+h2egKgEx+oUdhGWa1c= + resolve-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" @@ -6936,6 +7030,13 @@ safe-regex@^1.1.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== +saslprep@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/saslprep/-/saslprep-1.0.3.tgz#4c02f946b56cf54297e347ba1093e7acac4cf226" + integrity sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag== + dependencies: + sparse-bitfield "^3.0.3" + sass-graph@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.4.tgz#13fbd63cd1caf0908b9fd93476ad43a51d1e0b49" @@ -7118,6 +7219,11 @@ shebang-regex@^1.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= +sift@7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/sift/-/sift-7.0.1.tgz#47d62c50b159d316f1372f8b53f9c10cd21a4b08" + integrity sha512-oqD7PMJ+uO6jV9EQCl0LrRw1OwsiPsiFQR5AR30heR+4Dl7jBBbDLnNvWiak20tzZlSE1H7RB30SX/1j/YYT7g== + signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" @@ -7139,6 +7245,11 @@ slice-ansi@^2.1.0: astral-regex "^1.0.0" is-fullwidth-code-point "^2.0.0" +sliced@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/sliced/-/sliced-1.0.1.tgz#0b3a662b5d04c3177b1926bea82b03f837a2ef41" + integrity sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E= + snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -7222,6 +7333,13 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +sparse-bitfield@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz#ff4ae6e68656056ba4b3e792ab3334d38273ca11" + integrity sha1-/0rm5oZWBWuks+eSqzM004JzyhE= + dependencies: + memory-pager "^1.0.2" + spdx-correct@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4"