68 lines
2.5 KiB
JavaScript
68 lines
2.5 KiB
JavaScript
const express = require('express');
|
|
const bodyParser = require('body-parser');
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
const app = express();
|
|
const PORT = process.env.PORT || 3000;
|
|
const DATA_FILE_PATH = process.env.DATA_FILE_PATH || path.join(__dirname, 'data', 'weight-tracker-data.json'); // Default path for local dev, override in Docker
|
|
|
|
// Ensure data directory exists (especially for local dev, Docker volume handles it in container)
|
|
const dataDir = path.dirname(DATA_FILE_PATH);
|
|
if (!fs.existsSync(dataDir)) {
|
|
fs.mkdirSync(dataDir, { recursive: true });
|
|
}
|
|
|
|
app.use(bodyParser.json({ limit: '10mb' })); // Generous limit for the data file
|
|
|
|
// Middleware to log requests
|
|
app.use((req, res, next) => {
|
|
console.log(`${new Date().toISOString()} - ${req.method} ${req.originalUrl}`);
|
|
next();
|
|
});
|
|
|
|
// GET endpoint to retrieve data
|
|
app.get('/', (req, res) => {
|
|
fs.readFile(DATA_FILE_PATH, 'utf8', (err, data) => {
|
|
if (err) {
|
|
if (err.code === 'ENOENT') {
|
|
console.log(`Data file not found at ${DATA_FILE_PATH}, returning empty object.`);
|
|
return res.json({}); // If file doesn't exist, return empty JSON object
|
|
}
|
|
console.error('Error reading data file:', err);
|
|
return res.status(500).send('Error reading data file');
|
|
}
|
|
try {
|
|
res.json(JSON.parse(data));
|
|
} catch (parseErr) {
|
|
console.error('Error parsing data file content:', parseErr);
|
|
// If file content is not valid JSON, perhaps return empty or handle error
|
|
res.status(500).send('Error parsing data file content');
|
|
}
|
|
});
|
|
});
|
|
|
|
// PUT endpoint to save data
|
|
app.put('/', (req, res) => {
|
|
const dataToSave = JSON.stringify(req.body, null, 2); // Pretty print JSON
|
|
fs.writeFile(DATA_FILE_PATH, dataToSave, 'utf8', (err) => {
|
|
if (err) {
|
|
console.error('Error writing data file:', err);
|
|
return res.status(500).json({ message: 'Error writing data file', error: err.message || 'Unknown error' });
|
|
}
|
|
console.log(`Data saved successfully to ${DATA_FILE_PATH}`);
|
|
res.status(200).json({ message: 'Data saved successfully' });
|
|
});
|
|
});
|
|
|
|
app.listen(PORT, '0.0.0.0', () => {
|
|
console.log(`Server API listening on port ${PORT}`);
|
|
console.log(`Data file path: ${DATA_FILE_PATH}`);
|
|
});
|
|
|
|
// Basic error handler
|
|
app.use((err, req, res, next) => {
|
|
console.error(err.stack);
|
|
res.status(500).send('Something broke!');
|
|
});
|