QwarkDev

node.js + express example

Aug 27th, 2020
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. const express = require('express')
  3. const cors = require('cors')
  4. const path = require('path')
  5. const fs = require('fs')
  6.  
  7. const clf_date = require('clf-date')
  8. const date_format = require('dateformat')
  9. const moment = require('moment-timezone')
  10. const morgan = require('morgan')
  11.  
  12. const qwk = require('./functions.js')
  13. const app = express()
  14.  
  15. // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  16.  
  17. var settings = { port: 1010, next_id: 0 }
  18. var shortcuts = []
  19.  
  20. __dirname = path.join(__dirname, '..')
  21. var currentLogPath = path.join(__dirname, 'logs', `${date_format(new Date(), "yyyy-mm-dd HH.MM.ss")}.log`)
  22. var accessLogStream = fs.createWriteStream(currentLogPath, { flags: 'a' })
  23.  
  24. morgan.token('date', (req, res) => {
  25.   return clf_date(new Date())
  26. })
  27.  
  28. app.use(morgan(`[:date] :method :url :status :res[content-length] - :response-time ms`, { stream: accessLogStream }))
  29. app.use(morgan(`[:date] :method :url :status :res[content-length] - :response-time ms`))
  30. app.use(cors())
  31.  
  32. app.use('/', express.static(path.join(__dirname, 'public')))
  33.  
  34. // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  35.  
  36. function normalizeUrl(url) {
  37.   if (url.includes('https://')) {
  38.     return url
  39.   } else if (url.includes('http://')) {
  40.     return url
  41.   } else {
  42.     return `https://${url}`
  43.   }
  44. }
  45.  
  46. function saveState() {
  47.   fs.writeFileSync(path.join(__dirname, 'settings', 'settings.json'), JSON.stringify(settings, null, 2))
  48.   fs.writeFileSync(path.join(__dirname, 'data', 'shortcuts.json'), JSON.stringify(shortcuts, null, 2))
  49. }
  50.  
  51. function startup() {
  52.   try {
  53.     qwk.log(`Loading settings...`, 'Startup')
  54.     settings = JSON.parse(fs.readFileSync(path.join(__dirname, 'settings', 'settings.json'), 'utf8'))
  55.   } catch (e) {
  56.     qwk.log(`Loading error, creating new settings file.`, 'Startup')
  57.     fs.writeFileSync(path.join(__dirname, 'settings', 'settings.json'), JSON.stringify(settings, null, 2))
  58.   }
  59.  
  60.   try {
  61.     qwk.log(`Loading shortucts...`, 'Startup')
  62.     shortcuts = JSON.parse(fs.readFileSync(path.join(__dirname, 'data', 'shortcuts.json'), 'utf8'))
  63.     qwk.log(`Loaded ${shortcuts.length} shortucts`, 'Startup')
  64.   } catch (e) {
  65.     qwk.log(`Loading error, creating new shortucts file.`, 'Startup')
  66.     fs.writeFileSync(path.join(__dirname, 'data', 'shortcuts.json'), JSON.stringify(shortcuts, null, 2))
  67.   }
  68. }
  69.  
  70. // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  71.  
  72. // /api/create-shortcut/:
  73. // params: url - string
  74. // request example: /api/create-shortcut/?url=google.com
  75. app.get('/api/create-shortcut/', function(request, response) {
  76.   let url = request.query.url
  77.  
  78.   if (url == undefined) {
  79.     response.status(400).send(`Error: param 'url' not found in request`)
  80.     return
  81.   }
  82.  
  83.   obj = { id: settings.next_id++, url: normalizeUrl(url) }
  84.  
  85.   for (var i = 0; i < shortcuts.length; i++) {
  86.     if (shortcuts[i].url == obj.url) {
  87.       response.send(JSON.stringify(shortcuts[i], null, 2))
  88.       return
  89.     }
  90.   }
  91.  
  92.   shortcuts.push(obj)
  93.  
  94.   response.send(JSON.stringify(obj, null, 2))
  95.   saveState()
  96. })
  97.  
  98. // /:id:        (redirect by id)
  99. // params: id - integer
  100. // request example: /$integer
  101. app.get('/:id/', function(request, response) {
  102.   let id = request.params.id
  103.  
  104.   if (id == undefined) {
  105.     response.status(400).send(`Error: param 'id' not found in request<br>Use sh.url/id`)
  106.     return
  107.   }
  108.  
  109.   for (var i = 0; i < shortcuts.length; i++) {
  110.     if (shortcuts[i].id == id) {
  111.       response.redirect(shortcuts[i].url)
  112.       return
  113.     }
  114.   }
  115.  
  116.   response.status(404).sendFile(`${__dirname}/public/missing.html`)
  117. })
  118.  
  119. // /api/redirect/:  (redirect by request)
  120. // params: url - string
  121. // request example: /api/redirect/?url=google.com
  122. app.get('/api/redirect/', function(request, response) {
  123.   let url = request.query.url
  124.  
  125.   if (url == undefined) {
  126.     response.status(400).send(`Error: param 'url' not found in request`)
  127.     return
  128.   }
  129.  
  130.   response.redirect(normalizeUrl(url))
  131. })
  132.  
  133. // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  134.  
  135. startup()
  136. app.listen(settings.port)
  137. qwk.log(`Server started on ${settings.port}`, 'Startup')
  138.  
Add Comment
Please, Sign In to add comment