BlogSharer/index.js

70 lines
1.7 KiB
JavaScript
Raw Normal View History

2023-12-28 17:26:32 -06:00
const express = require("express"),
chokidar = require("chokidar"),
fs = require("fs"),
path = require("path"),
showdown = require("showdown"),
mkthtml = new showdown.Converter()
2023-12-28 17:48:56 -06:00
mkthtml.setFlavor("github")
2023-12-28 17:26:32 -06:00
const PORT = process.env.PORT || 8080
var dataPath = path.join(__dirname, 'data')
var postsPath = path.join(dataPath, 'posts')
var staticPath = path.join(__dirname, 'static')
var watcher = chokidar.watch(postsPath)
var app = express()
app.use(express.static(staticPath))
var reqPaths = [dataPath, postsPath]
for (var i = 0; i < reqPaths.length; i++) {
var p = reqPaths[i]
if (!fs.existsSync(p)) {
fs.mkdirSync(p)
}
}
app.listen(PORT, () => {
console.log("Violet's Limbo is now listening on: " + PORT)
})
function pageUpdate() {
2024-01-05 15:33:37 -06:00
var postsArray = fs.readdirSync(postsPath)
2023-12-28 17:26:32 -06:00
var html = ""
for (var i = 0; i < postsArray.length; i++) {
var addedHTML = ""
2024-01-05 16:09:09 -06:00
var post = postsArray[i]
2023-12-28 17:26:32 -06:00
2024-01-05 16:09:09 -06:00
addedHTML += `<h2><a href="./post/${post}">${post.substring(4, post.length - 3)}</h2></a>`
2023-12-28 17:26:32 -06:00
html += addedHTML
}
var html = fs.readFileSync(path.join(__dirname, 'resources/mainPage.html')).toString().replace('{POSTS}', html)
fs.writeFileSync(path.join(staticPath, 'index.html'), html)
}
watcher
.on('add', pageUpdate)
.on('change', pageUpdate)
.on('unlink', pageUpdate)
app.get('/post/:post*', (req, res) => {
2024-01-05 16:09:09 -06:00
var post = fs.readFileSync(path.join(postsPath, req.params.post)).toString()
2023-12-28 17:26:32 -06:00
post = mkthtml.makeHtml(post)
var html = fs.readFileSync(path.join(__dirname, 'resources/postPage.html')).toString()
html = html.replace('{POST}', post)
2024-01-05 16:09:09 -06:00
html = html.replace('{POST_TITLE}', req.params.post.substring(3, req.params.post.length - 3))
2023-12-28 17:26:32 -06:00
res.send(html)
})