From 1d059860133cbe5bb1eeea95a9b53d6332f2b905 Mon Sep 17 00:00:00 2001 From: Kyle Herock Date: Wed, 4 Jul 2018 13:57:25 -0400 Subject: [PATCH] Avoid monkeypatching the close method on the returned server instance (fixes #269) Everything that needs taken care of on close() is now done in the 'close' event handler. This also makes resetFs() sync so that it's able to finish running before the callback passed to close() is called. --- lib/index.js | 32 +++++++++----------------------- 1 file changed, 9 insertions(+), 23 deletions(-) diff --git a/lib/index.js b/lib/index.js index 03767d2e..d3271799 100755 --- a/lib/index.js +++ b/lib/index.js @@ -1,6 +1,5 @@ "use strict"; -const async = require("async"); const fs = require("fs-extra"); const { defaults } = require("lodash"); const https = require("https"); @@ -14,18 +13,12 @@ class S3rver { this.options = defaults({}, options, S3rver.defaultOptions); } - resetFs(callback) { + resetFs() { const { directory } = this.options; - fs.readdir(directory, (err, buckets) => { - if (err) return callback(err); - async.eachSeries( - buckets, - (bucket, callback) => { - fs.remove(path.join(directory, bucket), callback); - }, - callback - ); - }); + const buckets = fs.readdirSync(directory); + for (const bucket of buckets) { + fs.removeSync(path.join(directory, bucket)); + } } callback() { @@ -47,21 +40,14 @@ class S3rver { this.options.directory ); }) - .on("error", err => { - done(err); - }); - server.close = callback => { - const { close } = Object.getPrototypeOf(server); - return close.call(server, () => { + .on("close", () => { app.logger.unhandleExceptions(); app.logger.close(); if (this.options.removeBucketsOnClose) { - this.resetFs(callback); - } else { - callback(); + this.resetFs(); } - }); - }; + }) + .on("error", done); server.s3Event = app.s3Event; return server; }