My personal website https://leviolson.com
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

76 lines
1.9 KiB

6 years ago
  1. 'use strict'
  2. const express = require('express')
  3. const fs = require('fs')
  4. const path = require('path')
  5. const app = express()
  6. app.set('view engine', 'ejs')
  7. app.get('/', (req, res) => {
  8. res.render('pages/index', {
  9. title: "Levi Olson",
  10. active: "home",
  11. content: ""
  12. })
  13. })
  14. app.get('/posts', (req, res) => {
  15. const postDir = __dirname + '/posts'
  16. let files = fs.readdirSync(postDir, 'utf8')
  17. let data = {
  18. title: "Posts - Levi Olson",
  19. active: "posts",
  20. posts: []
  21. }
  22. for (let i = 0; i < files.length; i++) {
  23. if (path.extname(files[i]) === '.json') {
  24. data.posts.push(getData(files[i]))
  25. }
  26. }
  27. res.render('pages/posts', data)
  28. })
  29. function getData(file) {
  30. let postData
  31. try {
  32. postData = JSON.parse(fs.readFileSync('./posts/' + file, 'utf8'))
  33. postData.content = fs.readFileSync('./posts/' + postData.content_file, 'utf8')
  34. } catch (e) {
  35. return
  36. }
  37. return postData
  38. }
  39. app.get('/about', (req, res) => {
  40. res.sendFile(__dirname + '/views/pages/about.html')
  41. })
  42. app.get('/uncopyright', (req, res) => {
  43. return res.sendFile(__dirname + '/views/pages/uncopyright.html')
  44. })
  45. app.get('/404', (req, res) => {
  46. return res.status(404).render('pages/404', {
  47. title: "Page Not Found - Levi Olson",
  48. active: ""
  49. })
  50. })
  51. app.get('/core.css', (req, res) => {
  52. res.sendFile(__dirname + '/core.css')
  53. })
  54. app.get('/posts/:post', (req, res) => {
  55. let post = req.params.post
  56. let postData
  57. try {
  58. postData = JSON.parse(fs.readFileSync('./posts/' + post + '.json', 'utf8'))
  59. postData.content = fs.readFileSync('./posts/' + postData.content_file, 'utf8')
  60. } catch (e) {
  61. return res.redirect('/404')
  62. }
  63. return res.render('pages/post', postData)
  64. })
  65. app.listen(3000, () => console.log('Example app listening on port 3000!'))