Created
April 22, 2017 18:07
-
-
Save cklanac/74ce64cd8221cd0cbef6a726310c99e9 to your computer and use it in GitHub Desktop.
Promisify Run Server, Close Server
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
// closeServer needs access to a server object, but that only | |
// gets created when `runServer` runs, so we declare `server` here | |
// and then assign a value to it in run | |
let server = http.createServer(app) | |
.on('listening', () => { | |
console.info(`Your app is listening on port ${server.address().port}`); | |
}) | |
.on('close', () => { | |
console.info('server closed'); | |
}) | |
.on('error', (err) => { | |
console.error(err); | |
mongoose.disconnect(); | |
}); | |
// this function connects to our database, then starts the server | |
function runServer(databaseUrl = DATABASE_URL, port = PORT) { | |
return new Promise((resolve, reject) => { | |
mongoose.connect(databaseUrl) | |
.then(() => { | |
server.listen(port, resolve).on('error', reject); | |
}) | |
.catch(reject); | |
}); | |
} | |
// this function closes the server, and returns a promise. we'll | |
// use it in our integration tests later. | |
function closeServer() { | |
return mongoose.disconnect() | |
.then(() => { | |
return new Promise((resolve, reject) => { | |
server.close(err => { | |
if (err) {return reject(err);} | |
resolve(); | |
}); | |
}); | |
}); | |
} | |
// if server.js is called directly (aka, with `node server.js`), this block | |
// runs. but we also export the runServer command so other code (for instance, test code) can start the server as needed. | |
if (require.main === module) { | |
runServer().catch(err => console.error(err.message)); | |
} | |
module.exports = { runServer, app, closeServer }; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment