diff --git a/src/server.js b/src/server.js index e258663..578ac98 100644 --- a/src/server.js +++ b/src/server.js @@ -8,6 +8,7 @@ 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 const app = express() @@ -18,7 +19,8 @@ if (config == null) { throw new Error('Config file not found!') } -const scanner = new Scanner(config) +const dataHolder = new DataHolder() +const scanner = new Scanner(config, dataHolder) const watcher = chokidar.watch(path.join(process.cwd(), 'content'), { ignored: /(^|[/\\])\../, // ignore dotfiles @@ -66,7 +68,7 @@ if (head == null) { } } -const dataGetter = new DataGetter(config) +const dataGetter = new DataGetter(config, dataHolder) const serverRenderer = new ServerRenderer(head, config, dataGetter) app.get('*', serverRenderer.render.bind(serverRenderer)) diff --git a/src/utils/dataGetter.js b/src/utils/dataGetter.js index c7adfb1..fead96f 100644 --- a/src/utils/dataGetter.js +++ b/src/utils/dataGetter.js @@ -3,8 +3,9 @@ import jsonfile from 'jsonfile' import path from 'path' export class DataGetter { - constructor (config) { + constructor (config, dataHolder) { this.config = config + this.dataHolder = dataHolder } getData (reqPath) { @@ -15,7 +16,7 @@ export class DataGetter { getDataFromFile (reqPath) { if (reqPath === '') { - return this.readJson(path.join(process.cwd(), 'data.json')) + 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') diff --git a/src/utils/dataHolder.js b/src/utils/dataHolder.js new file mode 100644 index 0000000..cb0b02e --- /dev/null +++ b/src/utils/dataHolder.js @@ -0,0 +1,22 @@ +export class DataHolder { + constructor () { + this.data = { + posts: [], + other: {} + } + } + + addPost (post) { + this.data.posts.push(post) + } + + addOther (filename, data) { + this.data.other[filename] = data + } + + deleteFile (filepath) { + this.data.posts = this.dataHolder.data.posts.filter((post) => + post.filename !== filepath + ) + } +} diff --git a/src/utils/scanner.js b/src/utils/scanner.js index 2a81d21..d85f508 100644 --- a/src/utils/scanner.js +++ b/src/utils/scanner.js @@ -2,20 +2,12 @@ import fs from 'fs' import path from 'path' import fm from 'front-matter' import moment from 'moment' -import jsonfile from 'jsonfile' import zlib from 'zlib' export class Scanner { - constructor (config) { + constructor (config, dataHolder) { this.config = config - this.initData() - } - - initData () { - this.data = { - posts: [], - other: {} - } + this.dataHolder = dataHolder } addFile (filepath) { @@ -25,7 +17,6 @@ export class Scanner { } else { this.readfile(filepath) .then((data) => this.processFile(data[0], data[1])) - .then(() => this.writeData()) } } @@ -35,9 +26,7 @@ export class Scanner { } deleteFile (filepath) { - this.data.posts = this.data.posts.filter((post) => - post.filename !== filepath - ) + this.dataHolder.deleteFile(filepath) } readfile (filePath) { @@ -113,27 +102,14 @@ export class Scanner { link: '/post/' + metadata.filename } - this.data.posts.push(post) + this.dataHolder.addPost(post) } else { - this.data.other[metadata.filename] = data + this.dataHolder.addOther(metadata.filename, data) } return Promise.resolve() } - writeData () { - return new Promise((resolve, reject) => { - jsonfile.writeFile(path.join(process.cwd(), 'data.json'), this.data, (err) => { - if (err) { - reject(err) - } else { - this.initData() - resolve() - } - }) - }) - } - fileMetadata (filepath) { const paths = filepath.split('/') const basename = path.basename(filepath)