// Glint Research's Legally Distinct Clone — server entrypoint. // Zero config: `node server/index.js` and go. const http = require('http'); const path = require('path'); const express = require('express'); const { load } = require('./db'); const { seed } = require('./seed'); const { router } = require('./api'); const realtime = require('./realtime'); load(); seed(); const app = express(); app.use('/api', router); app.use(express.static(path.join(__dirname, '..', 'public'))); // SPA fallback for hash-less deep links app.get('*splat', (req, res) => { res.sendFile(path.join(__dirname, '..', 'public', 'index.html')); }); const server = http.createServer(app); realtime.attach(server, router); const START_PORT = Number(process.env.PORT) || 3000; server.on('listening', () => { const { port } = server.address(); console.log(''); console.log(' ✦ Glint Research\'s Legally Distinct Clone'); console.log(` ✦ running at http://localhost:${port}`); console.log(''); }); function listen(port, triesLeft) { server.once('error', (err) => { if (err.code === 'EADDRINUSE' && triesLeft > 0) { console.log(`port ${port} busy, trying ${port + 1}`); listen(port + 1, triesLeft - 1); } else { throw err; } }); server.listen(port); } listen(START_PORT, 10);