diff --git a/package.json b/package.json index 9ec1ee0..759b10b 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "scripts": { "dev": "next dev", "build": "next build", - "start": "next start", + "start": "NODE_ENV=production node server.js", "lint": "next lint", "test": "jest", "format": "prettier --check ./src", diff --git a/server.js b/server.js new file mode 100644 index 0000000..7e40514 --- /dev/null +++ b/server.js @@ -0,0 +1,40 @@ +const { createServer } = require('http'); +const { parse } = require('url'); +const next = require('next'); + +const dev = process.env.NODE_ENV !== 'production'; +const hostname = 'localhost'; +const port = 3000; +// when using middleware `hostname` and `port` must be provided below +const app = next({ dev, hostname, port }); +const handle = app.getRequestHandler(); + +app.prepare().then(() => { + createServer(async (req, res) => { + try { + // Be sure to pass true as the second argument to url.parse. + // This tells it to parse the query portion of the URL. + const parsedUrl = parse(req.url, true); + const { pathname, query } = parsedUrl; + + if (pathname === '/a') { + await app.render(req, res, '/a', query); + } else if (pathname === '/b') { + await app.render(req, res, '/b', query); + } else { + await handle(req, res, parsedUrl); + } + } catch (err) { + console.error('Error occurred handling', req.url, err); + res.statusCode = 500; + res.end('internal server error'); + } + }) + .once('error', (err) => { + console.error(err); + process.exit(1); + }) + .listen(port, () => { + console.log(`> Ready on http://${hostname}:${port}`); + }); +});