Files
esercizi-web/server-api/server.js
2026-02-12 00:40:05 +01:00

52 lines
1.6 KiB
JavaScript

// 1. Controllo e installazione automatica dipendenze
const { execSync } = require('child_process');
execSync('npm install', { stdio: 'inherit' });
// 2. Avvio del server JSON
const jsonServer = require('json-server');
const server = jsonServer.create();
const router = jsonServer.router('database/db.json');
const middlewares = jsonServer.defaults({ static: 'public' });
// Configurazione del server
server.use(middlewares);
server.get('/api', (req, res) => {
const keys = Object.keys(router.db.getState());
const schema = {};
keys.forEach(key => {
schema[key] = Object.keys(router.db.getState()[key][0]);
});
res.json(schema);
});
server.use('/api', router);
// Avvio del server
const host = '0.0.0.0';
const port = 5000;
server.listen(port, host, () => {
console.log(`\nJSON Server is running:`);
const os = require('os');
const interfaces = os.networkInterfaces();
Object.keys(interfaces).forEach((ifname) => {
interfaces[ifname].forEach((iface) => {
// Filtra IPv4 non interni
if (iface.family === 'IPv4' && !iface.internal) {
// Filtra spesso le interfacce virtuali (opzionale ma utile)
// 192.168.56.x è solitamente VirtualBox Host-Only
if (!iface.address.startsWith('192.168.56')) {
console.log(` http://${iface.address}:${port}/api`);
}
}
});
});
console.log('\nResources:');
Object.keys(router.db.getState()).forEach(key => {
console.log(`/api/${key}`);
});
});