const app = require('express')() const server = require('http').Server(app) const io = require('socket.io')(server) const next = require('next') const port = parseInt(process.env.PORT, 10) || 3000 const dev = process.env.NODE_ENV !== 'production' const nextApp = next({ dev }) const nextHandler = nextApp.getRequestHandler() // fake DB const messages = [] // socket.io server io.on('connection', socket => { socket.on('message', (data) => { messages.push(data) socket.broadcast.emit('message', data) }) }) nextApp.prepare().then(() => { app.get('/messages', (req, res) => { res.json(messages) }) app.get('*', (req, res) => { return nextHandler(req, res) }) server.listen(port, (err) => { if (err) throw err console.log(`> Ready on http://localhost:${port}`) }) })