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.

101 lines
2.5 KiB

6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
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.use(express.static('public'))
  7. const env = process.env.NODE_ENV
  8. if (env === 'dev') {
  9. app.use('/coverage', express.static('coverage'))
  10. }
  11. app.set('view engine', 'ejs')
  12. app.get('/', (req, res) => {
  13. res.render('pages/index', {
  14. title: "Levi Olson",
  15. active: "home",
  16. content: ""
  17. })
  18. })
  19. app.get('/posts', (req, res) => {
  20. const postDir = __dirname + '/posts'
  21. let files = fs.readdirSync(postDir, 'utf8')
  22. let data = {
  23. title: "Posts - Levi Olson",
  24. active: "posts",
  25. posts: []
  26. }
  27. for (let i = 0; i < files.length; i++) {
  28. if (path.extname(files[i]) === '.json') {
  29. let postData = getData(files[i])
  30. if (postData) {
  31. data.posts.push(postData)
  32. } else {
  33. console.log(files[i], 'does not have a corresponding "html" file')
  34. }
  35. }
  36. }
  37. data.posts.sort(function (a, b) {
  38. var keyA = new Date(a.created_at),
  39. keyB = new Date(b.created_at)
  40. // Compare the 2 dates
  41. if (keyA < keyB) return 1
  42. if (keyA > keyB) return -1
  43. return 0
  44. })
  45. res.render('pages/posts', data)
  46. })
  47. function getData(file) {
  48. let postData
  49. try {
  50. postData = JSON.parse(fs.readFileSync('./posts/' + file, 'utf8'))
  51. postData.content = fs.readFileSync('./posts/' + postData.content_file, 'utf8')
  52. } catch (e) {
  53. return
  54. }
  55. return postData
  56. }
  57. app.get('/about', (req, res) => {
  58. res.sendFile(__dirname + '/views/pages/about.html')
  59. })
  60. app.get('/uncopyright', (req, res) => {
  61. return res.sendFile(__dirname + '/views/pages/uncopyright.html')
  62. })
  63. app.get('/404', (req, res) => {
  64. return res.status(404).render('pages/404', {
  65. title: "Page Not Found - Levi Olson",
  66. active: ""
  67. })
  68. })
  69. app.get('/core.css', (req, res) => {
  70. res.sendFile(__dirname + '/core.css')
  71. })
  72. app.get('/posts/:post', (req, res) => {
  73. let post = req.params.post
  74. let postData
  75. try {
  76. postData = JSON.parse(fs.readFileSync('./posts/' + post + '.json', 'utf8'))
  77. postData.content = fs.readFileSync('./posts/' + postData.content_file, 'utf8')
  78. } catch (e) {
  79. return res.redirect('/404')
  80. }
  81. return res.render('pages/post', postData)
  82. })
  83. const port = 3000
  84. app.listen(port, () => console.log('Example app listening on port ' + port + '!'))
  85. module.exports = app