Skip to content

Commit 1064f0c

Browse files
authored
Support: serverCloseComplete option (#5937)
* Support: serverCloseComplete option Callback when server has fully shutdown. Please check that all cases are covered. * handle error on startup * fix tests * test workaround * remove serverCloseComplete chech on startup failure
1 parent 994cdb7 commit 1064f0c

File tree

5 files changed

+28
-4
lines changed

5 files changed

+28
-4
lines changed

spec/ParseServer.spec.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ describe('Server Url Checks', () => {
6262
collectionPrefix: 'test_',
6363
});
6464
}
65+
let close = false;
6566
const newConfiguration = Object.assign({}, defaultConfiguration, {
6667
databaseAdapter,
6768
serverStartComplete: () => {
@@ -71,10 +72,14 @@ describe('Server Url Checks', () => {
7172
done.fail('Close Server Error');
7273
}
7374
reconfigureServer({}).then(() => {
75+
expect(close).toBe(true);
7476
done();
7577
});
7678
});
7779
},
80+
serverCloseComplete: () => {
81+
close = true;
82+
},
7883
});
7984
const parseServer = ParseServer.start(newConfiguration);
8085
});

src/Options/Definitions.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -330,6 +330,14 @@ module.exports.ParseServerOptions = {
330330
action: parsers.numberParser('schemaCacheTTL'),
331331
default: 5000,
332332
},
333+
serverCloseComplete: {
334+
env: 'PARSE_SERVER_SERVER_CLOSE_COMPLETE',
335+
help: 'Callback when server has closed',
336+
},
337+
serverStartComplete: {
338+
env: 'PARSE_SERVER_SERVER_START_COMPLETE',
339+
help: 'Callback when server has started',
340+
},
333341
serverURL: {
334342
env: 'PARSE_SERVER_URL',
335343
help: 'URL to your parse server with http:// or https://.',

src/Options/docs.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@
5959
* @property {Boolean} revokeSessionOnPasswordReset When a user changes their password, either through the reset password email or while logged in, all sessions are revoked if this is true. Set to false if you don't want to revoke sessions.
6060
* @property {Boolean} scheduledPush Configuration for push scheduling, defaults to false.
6161
* @property {Number} schemaCacheTTL The TTL for caching the schema for optimizing read/write operations. You should put a long TTL when your DB is in production. default to 5000; set 0 to disable.
62+
* @property {Function} serverCloseComplete Callback when server has closed
63+
* @property {Function} serverStartComplete Callback when server has started
6264
* @property {String} serverURL URL to your parse server with http:// or https://.
6365
* @property {Number} sessionLength Session duration, in seconds, defaults to 1 year
6466
* @property {Boolean} silent Disables console output

src/Options/index.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,8 +199,10 @@ export interface ParseServerOptions {
199199
:ENV: PARSE_SERVER_PLAYGROUND_PATH
200200
:DEFAULT: /playground */
201201
playgroundPath: ?string;
202-
202+
/* Callback when server has started */
203203
serverStartComplete: ?(error: ?Error) => void;
204+
/* Callback when server has closed */
205+
serverCloseComplete: ?() => void;
204206
}
205207

206208
export interface CustomPagesOptions {

src/ParseServer.js

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,6 @@ class ParseServer {
8989
if (serverStartComplete) {
9090
serverStartComplete(error);
9191
} else {
92-
// eslint-disable-next-line no-console
9392
console.error(error);
9493
process.exit(1);
9594
}
@@ -119,10 +118,18 @@ class ParseServer {
119118
if (adapter && typeof adapter.handleShutdown === 'function') {
120119
const promise = adapter.handleShutdown();
121120
if (promise instanceof Promise) {
122-
return promise;
121+
return promise.then(() => {
122+
if (this.config.serverCloseComplete) {
123+
this.config.serverCloseComplete();
124+
}
125+
});
123126
}
124127
}
125-
return Promise.resolve();
128+
return Promise.resolve().then(() => {
129+
if (this.config.serverCloseComplete) {
130+
this.config.serverCloseComplete();
131+
}
132+
});
126133
}
127134

128135
/**

0 commit comments

Comments
 (0)