Store data in memory instead of writing to file
This commit is contained in:
parent
d4f41ec33e
commit
feb5f7ccee
|
@ -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))
|
||||
|
||||
|
|
|
@ -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')
|
||||
|
|
|
@ -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
|
||||
)
|
||||
}
|
||||
}
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue