codex-lv4-may-2025

Level Navigation: 1 2 3 (4ℹ️) (5ℹ️) 6 7 8 9 10 11 12 13 14⚡ 15⚡ (16ℹ️) 17 18 19 20 21 22 23 24 25 26⚡ 27⚡ 28⚡ 29 30 31 32 33 34 35 36 37 38 39⚡ 40⚡

Level 26 (Challenge): Persist to Disk

Show Me: read from disk

import { readFileSync, writeFileSync } from 'node:fs';

const DATA_PATH = './items.json';

// Load data from file when server starts
// If file doesn't exist yet, start with empty array
let itemsStorage = [];
try {
  itemsStorage = JSON.parse(readFileSync(DATA_PATH, 'utf-8'));
} catch (error) {
  // File doesn't exist yet, start with empty array
  itemsStorage = [];
}
Show Me: persist to disk

import { readFileSync, writeFileSync } from 'node:fs';

const DATA_PATH = './items.json';

// Load data from file when server starts (read once at startup)
// If file doesn't exist yet, start with empty array
let itemsStorage = [];
try {
  itemsStorage = JSON.parse(readFileSync(DATA_PATH, 'utf-8'));
} catch (error) {
  // File doesn't exist yet, start with empty array
  itemsStorage = [];
}

function saveItems() {
  writeFileSync(DATA_PATH, JSON.stringify(itemsStorage, null, 2));
}

// Use in your routes - call saveItems() after each change:
app.post('/items', (req, res) => {
  itemsStorage.push(req.body);
  saveItems(); // Write after each POST
  res.json(req.body);
});

app.put('/items/:id', (req, res) => {
  // ... update logic ...
  saveItems(); // Write after each PUT
  res.json(updatedItem);
});

app.delete('/items/:id', (req, res) => {
  // ... delete logic ...
  saveItems(); // Write after each DELETE
  res.json({ message: 'Deleted' });
});