This repository has been archived on 2025-01-25. You can view files and clone it, but cannot push or open issues or pull requests.
noteApp/app.js
2020-07-26 22:31:51 +02:00

110 lines
2.5 KiB
JavaScript

const express = require('express')
const siteMap = require('./siteMap')
const compile = require('./compile');
const settings = require('./settings');
const { render } = require('ejs');
console.log(siteMap)
const app = express()
app.set('view engine', 'ejs');
app.set('views', __dirname + '/views')
app.use('/:vak/static', renderStatic)
app.use('/:vak/:page', renderPage)
app.use('/:vak', renderVak)
app.use('/', renderIndex)
app.use(render404)
function onError404(req, res, next){
return function(err){
render404(req, res, next)
}
}
function renderStatic(req, res, next){
if(typeof siteMap[req.params.vak] == 'undefined') return next();
vak = siteMap[req.params.vak]
dir = __dirname.split('/'); dir.pop() // remove dir of this code
dir = `${dir.join('/')}/${vak.title}/notes/static${req.path}`
res.sendFile(dir, onError404(req, res, next))
}
function renderPage(req, res, next){
if(typeof siteMap[req.params.vak] == 'undefined') return next();
vak = siteMap[req.params.vak]
if(typeof vak.pages[req.params.page] == 'undefined') return next();
page = vak.pages[req.params.page]
compile(page, function(html){
if(typeof html != 'string'){ return next() }
res.render('main', {
siteMap,
title: "notes",
topNav: vak.pages,
vak: req.params.vak,
page: req.params.page,
main: html
})
})
}
function renderVak(req, res, next){
if(typeof siteMap[req.params.vak] == 'undefined') return next();
vak = siteMap[req.params.vak]
if(vak.index == null){
res.render('main', {
siteMap,
title: "notes",
topNav: vak.pages,
vak: req.params.vak,
main: `<h1>${vak.title}</h1>`
})
}else{
compile(vak.index, function(html){
if(typeof html != 'string'){ return next() }
res.render('main', {
siteMap,
title: "notes",
topNav: vak.pages,
vak: req.params.vak,
main: html
}, onError404(req, res, next))
})
}
}
function renderIndex(req, res, next){
res.render('main', {
siteMap,
title: "notes",
topNav: siteMap,
main: "<h1>Hoi</h1>"
}, onError404(req, res, next))
}
function render404(req, res, next){
res.status(404)
res.render('main', {
siteMap,
title: "notes",
topNav: vak.pages,
vak: req.params.vak,
main: "<h1>404 - Page not found</h1>"
}, (err) => {
if(err){
res.send("<h1>404 - Page not found</h1>")
}
})
}
app.listen(settings.serverPort, ()=>{console.log("server listening on", settings.serverPort)})