Permalink
Cannot retrieve contributors at this time
53 lines (45 sloc)
1.76 KB
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
docs/start-server.js /
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import dotenv from 'dotenv' | |
| import './lib/check-node-version.js' | |
| import './lib/handle-exceptions.js' | |
| import portUsed from 'port-used' | |
| import createApp from './lib/app.js' | |
| import warmServer from './lib/warm-server.js' | |
| import http from 'http' | |
| dotenv.config() | |
| const { PORT, NODE_ENV } = process.env | |
| const port = Number(PORT) || 4000 | |
| export async function main() { | |
| if (NODE_ENV !== 'production') { | |
| await checkPortAvailability() | |
| } | |
| return await startServer() | |
| } | |
| async function checkPortAvailability() { | |
| // Check that the development server is not already running | |
| const portInUse = await portUsed.check(port) | |
| if (portInUse) { | |
| console.log(`\n\n\nPort ${port} is not available. You may already have a server running.`) | |
| console.log( | |
| `Try running \`npx kill-port ${port}\` to shut down all your running node processes.\n\n\n` | |
| ) | |
| console.log('\x07') // system 'beep' sound | |
| process.exit(1) | |
| } | |
| } | |
| async function startServer() { | |
| const app = createApp() | |
| // Warm up as soon as possible. | |
| // The `warmServer()` function is idempotent and it will soon be used | |
| // by some middleware, but there's no point in having a started server | |
| // without this warmed up. Besides, by starting this slow thing now, | |
| // it can start immediately instead of waiting for the first request | |
| // to trigger it to warm up. That way, when in development and triggering | |
| // a `nodemon` restart, there's a good chance the warm up has come some | |
| // way before you manage to reach for your browser to do a page refresh. | |
| await warmServer() | |
| // Workaround for https://github.com/expressjs/express/issues/1101 | |
| const server = http.createServer(app) | |
| return server | |
| .listen(port, () => console.log(`app running on http://localhost:${port}`)) | |
| .on('error', () => server.close()) | |
| } |