UNPKG

vulcain-corejs

Version:
139 lines (137 loc) 5.94 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments)).next()); }); }; const express = require("express"); const abstractAdapter_1 = require("./../abstractAdapter"); const annotations_1 = require("../../di/annotations"); const conventions_1 = require("../../utils/conventions"); const response_1 = require("./../../pipeline/response"); const system_1 = require("./../../configurations/globals/system"); const cookieParser = require('cookie-parser'); const bodyParser = require('body-parser'); const cors = require("cors"); class ExpressAdapter extends abstractAdapter_1.AbstractAdapter { constructor(domainName, container, app) { super(domainName, container); this.app = app; const self = this; this.express = express(); this.express.use(function (req, res, next) { self.createRequestContext(req); return next(); }); this.express.use(cookieParser()); this.express.use(cors()); this.express.use(bodyParser.urlencoded({ extended: true })); this.express.use(bodyParser.json()); let auth = this.container.get(annotations_1.DefaultServiceNames.Authentication, true); this.auth = auth && auth.init(this.testUser); } sendResponse(expressResponse, response) { if (!response) { expressResponse.end(); return; } if (response.headers) { for (const [k, v] of response.headers) { expressResponse.setHeader(k, v); } } expressResponse.statusCode = response.statusCode || 200; if (response.contentType && response.contentType !== response_1.HttpResponse.VulcainContentType) { expressResponse.contentType(response.contentType); } if (response.content) { if (response.encoding) { expressResponse.end(response.content, response.encoding); } else { expressResponse.send(response.content); } } } initializeRequestContext(ctx, request) { ctx.headers = request.headers; ctx.hostName = request.get('Host'); // Set requestcontext for authentication middlewares request.requestContext = ctx; } initialize() { this.express.get('/health', (req, res) => { res.status(200).end(); }); this.express.get(conventions_1.Conventions.instance.defaultUrlprefix + '/_schemas/:name?', (req, res) => { let domain = this.container.get(annotations_1.DefaultServiceNames.Domain); let name = req.params.name; if (name) { let schema = domain.getSchema(name, true); res.send(schema); } else { res.send(domain.schemas); } }); this.express.get(conventions_1.Conventions.instance.defaultUrlprefix + '/:schemaAction?/:id?', this.auth, (req, res) => __awaiter(this, void 0, void 0, function* () { let ctx = req.requestContext; req.requestContext = null; // release for gc let result = yield this.executeQueryRequest(req, ctx); this.sendResponse(res, result); })); // All actions by post this.express.post(conventions_1.Conventions.instance.defaultUrlprefix + '/:schemaAction?', this.auth, (req, res) => __awaiter(this, void 0, void 0, function* () { let ctx = req.requestContext; req.requestContext = null; // release for gc let result = yield this.executeActionRequest(req, ctx); this.sendResponse(res, result); })); } addActionCustomRoute(verb, path, callback) { this.express[verb](path, this.auth, (req, res) => __awaiter(this, void 0, void 0, function* () { let ctx = req.requestContext; req.requestContext = null; // release for gc let command = callback(req); if (!command || !command.action) { throw new Error("Invalid custom command configuration"); } command.domain = this.domainName; let result = yield this.executeActionRequest(req, ctx, command); this.sendResponse(res, result); })); } /** * Set static root for public web site * * @param {string} basePath * * @memberOf ExpressAdapter */ setStaticRoot(basePath) { system_1.System.log.info(null, "Set wwwroot to " + basePath); if (!basePath) { throw new Error("BasePath is required."); } this.express.use(express.static(basePath)); /* this.express.use('/assets', express.static(basePath + '/assets')); this.express.all('/*', function (req, res, next) { // Just send the index.html for other files to support HTML5Mode res.sendFile('index.html', { root: basePath }); });*/ } start(port) { let listener = this.express.listen(port, (err) => { system_1.System.log.info(null, 'Listening on port ' + port); }); this.app.onServerStarted(listener, this); } useMiddleware(verb, path, handler) { this.express[verb](path, handler); } } exports.ExpressAdapter = ExpressAdapter; //# sourceMappingURL=expressAdapter.js.map