inceptum
Version:
hipages take on the foundational library for enterprise-grade apps written in NodeJS
70 lines • 2.92 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const e = require("express");
const BaseSingletonDefinition_1 = require("../ioc/objectdefinition/BaseSingletonDefinition");
const NewrelicUtil_1 = require("../newrelic/NewrelicUtil");
const LogManager_1 = require("../log/LogManager");
const WebRoutingInspector_1 = require("./WebRoutingInspector");
const logger = LogManager_1.LogManager.getLogger(__filename);
class RouteRegisterUtil {
constructor() {
this.routesToRegister = [];
}
doRegister() {
this.routesToRegister.forEach((route) => {
logger.info(`Registering route from ${route.objectName}: ${route.verb.toUpperCase()} ${route.path} -> ${route.methodName}`);
this.express[route.verb](route.path, (req, res) => {
return this[route.instanceProperty][route.methodName](req, res);
});
});
}
}
exports.RouteRegisterUtil = RouteRegisterUtil;
exports.errorMiddleware = (err, req, res, next) => {
if (NewrelicUtil_1.NewrelicUtil.isNewrelicAvailable()) {
const nr = NewrelicUtil_1.NewrelicUtil.getNewrelicIfAvailable();
nr.noticeError(nr);
}
logger.error(err);
if (res.headersSent) {
return next(err); // Give back to express to handle
}
res.status(500).end();
};
class WebPlugin {
constructor() {
this.name = 'WebPlugin';
this.expressProvider = () => new e();
}
willStart(app, pluginContext) {
const express = this.expressProvider();
pluginContext.set(WebPlugin.CONTEXT_APP_KEY, express);
const context = app.getContext();
const definition = new BaseSingletonDefinition_1.BaseSingletonDefinition(RouteRegisterUtil);
definition.withLazyLoading(false);
definition.startFunction('doRegister');
definition.setPropertyByValue('express', express);
context.registerDefinition(definition);
context.addObjectDefinitionInspector(new WebRoutingInspector_1.WebRoutingInspector(definition));
}
didStart(app, pluginContext) {
const express = pluginContext.get(WebPlugin.CONTEXT_APP_KEY);
const port = app.getConfig('app.server.port', 10010);
// Add error handling middleware as the final middleware.
express.use(exports.errorMiddleware);
// Start the server
const server = express.listen(port, () => {
app.logger.info(`Server started at http://localhost:${port}`);
});
pluginContext.set(WebPlugin.CONTEXT_SERVER_KEY, server);
}
willStop(app, pluginContext) {
const express = pluginContext.get(WebPlugin.CONTEXT_SERVER_KEY);
app.logger.info('Shutting down server');
express.close();
}
}
WebPlugin.CONTEXT_APP_KEY = 'WebPlugin/APP';
WebPlugin.CONTEXT_SERVER_KEY = 'WebPlugin/SERVER';
exports.default = WebPlugin;
//# sourceMappingURL=WebPlugin.js.map