33 lines
		
	
	
		
			876 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			33 lines
		
	
	
		
			876 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
// this ensures node understands the future
 | 
						|
require('@babel/register');
 | 
						|
const _ = require('lodash');
 | 
						|
const createDebugger = require('debug');
 | 
						|
 | 
						|
const log = createDebugger('fcc:server:production-start');
 | 
						|
const startTime = Date.now();
 | 
						|
// force logger to always output
 | 
						|
// this may be brittle
 | 
						|
log.enabled = true;
 | 
						|
// this is where server starts booting up
 | 
						|
const app = require('./server');
 | 
						|
 | 
						|
let timeoutHandler;
 | 
						|
let killTime = 15;
 | 
						|
 | 
						|
const onConnect = _.once(() => {
 | 
						|
  log('db connected in: %s', Date.now() - startTime);
 | 
						|
  if (timeoutHandler) {
 | 
						|
    clearTimeout(timeoutHandler);
 | 
						|
  }
 | 
						|
  app.start();
 | 
						|
});
 | 
						|
 | 
						|
timeoutHandler = setTimeout(() => {
 | 
						|
  const message = `db did not connect after ${killTime}s -- crashing hard`;
 | 
						|
  // purposely shutdown server
 | 
						|
  // pm2 should restart this in production
 | 
						|
  throw new Error(message);
 | 
						|
}, killTime * 1000);
 | 
						|
 | 
						|
app.dataSources.db.on('connected', onConnect);
 |