src/server/server.js
// @flow
const express = require("express");
const init = require("../lib/init");
const config = require("../lib/config");
const db = require("../lib/db");
const expressInit = require("./express");
const passport = require("./passport");
const i18n = require("./i18n");
const routes = require("./routes");
const tmplVars = require("./tmpl-vars");
const cron = require("./cron");
module.exports = (callback: (err: ?Error, server: Server) => void) => {
const port = config.PORT;
const app = express();
init((err?: Error) => {
/* istanbul ignore if */
if (err) {
return callback(err);
}
// Load in the main server logic
expressInit(app);
passport(app);
i18n(app);
tmplVars(app);
routes(app);
const server = app.listen(port, () => {
callback(null, server);
/* istanbul ignore if */
if (process.send) {
process.send("online");
}
});
if (server) {
server.on("close", () => {
db.close();
});
}
/* istanbul ignore if */
if (config.NODE_ENV !== "test") {
// Start the app by listening on <port>
console.log(`PORT: ${port}`);
process.on("message", message => {
if (message === "shutdown") {
process.exit(0);
}
});
process.on("uncaughtException", err => {
console.error("Exception:", err.stack);
if (process.send) {
process.send("offline");
}
});
cron.start();
}
});
};