require('dotenv').config() const path = require('path') const express = require('express') const cookieParser = require('cookie-parser') const webpack = require('webpack') const socketio = require('socket.io') const { createServer } = require('http') const webpackDevMiddleware = require('webpack-dev-middleware') const apiProxyMiddleware = require('./apiProxyMiddleware') const realtime = require('./realtime') const port = process.env.PORT || 3000 const app = express() const server = createServer(app) const io = socketio(server) realtime(io) // sets up the socketio event listeners app.use(cookieParser()) // serve the whole public folder as static files app.use(express.static(path.join(__dirname, 'public'))) if (process.env.NODE_ENV === 'development') { const config = require('./webpack.config.js') const compiler = webpack(config) // Tell express to use the webpack-dev-middleware and use the webpack.config.js // configuration file as a base. app.use(webpackDevMiddleware(compiler, { publicPath: config.output.publicPath })) } // pass XMLHttpRequests // through to the API // anything which is the UI wanting to make requests to the API app.use(apiProxyMiddleware) // for any normal route app.get('*', function (req, res) { // respond with the same html file // since the whole UI technically boots // from the React app and the javascript res.sendFile(path.join(__dirname, 'public/index.html')) }) // Start up the server server.listen(port, function () { console.log('Metamaps listening on port ' + port + '\n') });