Skip to content

Instantly share code, notes, and snippets.

@cklanac
Created April 22, 2017 18:07
Show Gist options
  • Save cklanac/74ce64cd8221cd0cbef6a726310c99e9 to your computer and use it in GitHub Desktop.
Save cklanac/74ce64cd8221cd0cbef6a726310c99e9 to your computer and use it in GitHub Desktop.
Promisify Run Server, Close Server
// 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