You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

69 lines
2.9 KiB
JavaScript

// Dependencies declaration & setup
// fs is for working with files, aka the JSON file we want to use to store our labels data
const fs = require('fs');
// express is for setting up the server and make it works when users do their things in the browser
const express = require('express');
const app = express();
const path = require('path');
// the port is setted in the etc/nginx/sites-enabled under the location /collecting-labels
const port = 3124;
// express middleware for working with JSON between the server (this) and the client (all the things in the public folder)
app.use(express.urlencoded({ extended: true }));
app.use(express.json());
// serves the contents of the public folder as static resources
// i.e. then you can access it using https://hub.xpub.nl/soupboat/collecting-labels as root
app.use('/collecting-labels', express.static('public'))
// we dont need this now because express automatically uses the index.html file in the /public folder
// (still need to understand how to get a notification when someone connects, but maybe it is just a callbac to the app.use function of line 19whe
// app.get('/collecting-labels', function(req, res) {
// res.sendFile(path.join(__dirname, 'public', 'index.html'));
// console.log('Someone connected!')
// });
// when a post request is made to the https://hub.xpub.nl/soupboat/collecting-labels url this function starts
app.post('/collecting-labels', function(req, res) {
// with fs we read the file labels.json inside the public folder
// it is there because we then use the same file in the client for drawing all the labels stored in the server
// don't know if it is a good idea or not tho
// for now oke
// also: we need to check that the contents of the post request is what we want aka a label object, structured as we want ecc
// and not some other random thing, otherwise everything will break
fs.readFile('public/labels.json', function(err, data) {
if (err) throw err;
// parse a JSON out of the labels.json file
let storage = JSON.parse(data)
// insert the req.body (aka our label object) to the labels array present inside the labels.json file
storage.labels.push(req.body)
// overwrite the labels.json file with all the data
// this will not be efficient in the long term, but then we may switch to a proper database and not this scissor and glue thing
fs.writeFile('public/labels.json', JSON.stringify(storage), (err)=>{
if (err) throw err;
console.log('Data written to file');})
})
// reply to the client
// TODO: sayng oke everything worked nice
// for now it just echoes the incoming data
res.send(req.body)
});
// listen to the port we defined at the beginning aka wait for clients to connect there
app.listen(port, function() {
console.log(`🧶 → Collecting Labels on port ${port}!`)
});