import { createServer } from 'http'; import { parse } from 'url'; import next from 'next'; // Reference: https://www.dotenv.org/docs/quickstart#initial-setup import dotenv from 'dotenv'; dotenv.config(); import { QuotesService } from './quotes-service'; const port = parseInt(process.env.PORT || '3000', 10); const app = next({ dev: process.env.NODE_ENV !== 'production' }); const handle = app.getRequestHandler(); const quotesService = new QuotesService(); declare global { namespace NodeJS { interface Global { quotesService: typeof quotesService } } } // TODO: Look for a better way to use quotesService // Initialize global quotes service (global as any).quotesService = quotesService app.prepare().then(() => { const server = createServer(async (req, res) => { const parsedUrl = parse(req.url!, true); handle(req, res, parsedUrl); }); server.listen(port, () => { console.log(`> Server listening at http://localhost:${port}`); }); // Initial call and interval setup quotesService.fetchAndCacheQuotes(); // Initial store setInterval(() => quotesService.fetchAndCacheQuotes(), 5 * 60 * 1000); // Update cache every 5 minutes });