@methodus/server
Version:
dynamic rpc components
154 lines • 6.78 kB
JavaScript
;
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
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());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
require("reflect-metadata");
const express = require("express");
const bodyParser = require("body-parser");
const cookieParser = require("cookie-parser");
const path = require("path");
const base_1 = require("../base");
const _1 = require("../../response/");
const log_1 = require("../../log");
const express_1 = require("../express");
const Request_1 = require("./Request");
function urlEncode(object) {
let map = object.value;
let str = '';
Object.keys(map).map(key => {
if (Array.isArray(map[key])) {
map[key].forEach(element => {
str += '&' + key + '=' + element;
});
}
else {
str += '&' + key + '=' + map[key];
}
});
str = str.substr(1); //remove preceding &
return str;
}
let Express = class Express extends base_1.BaseServer {
constructor(port, onStart) {
super();
this._app = express();
this._app.use(bodyParser.urlencoded({
extended: true
}));
this._app.use(bodyParser.json());
this._app.use(cookieParser());
this._app.set('showStackError', true);
// Set ejs as the template engine
//this._app.engine('server.view.html', consolidate['ejs']);
// Set views path and view engine
this._app.set("view engine", "ejs");
const viewPath = path.join(__dirname, '..', '..', '..', "views");
this._app.set("views", viewPath);
//this._app.set('view engine', consolidate['ejs']);
//this._app.set('views', '../views');
// Add headers
this._app.use(function (req, res, next) {
// Website you wish to allow to connect
if (req.headers.origin) {
res.setHeader('Access-Control-Allow-Origin', req.headers.origin);
}
// Request methods you wish to allow
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
let headersX = Object.keys(req.headers).map((headerName) => {
return headerName.split('-').map((word) => {
return headerName.charAt(0).toUpperCase() + headerName.substr(1);
}).join('-');
}).join(',');
headersX = 'Content-Type,' + headersX;
// Request headers you wish to allow
res.setHeader('Access-Control-Allow-Headers', headersX);
// Set to true if you need the website to include cookies in the requests sent
// to the API (e.g. in case you use sessions)
res.setHeader('Access-Control-Allow-Credentials', true);
// Pass to next layer of middleware
next();
});
if (onStart) {
onStart(this._app);
}
function errorHandler(err, req, res, next) {
var errorCode = '500';
var errReason = 'Exception';
var stack = err.stack;
log_1.logger.error(`${errorCode}. Error ${new Date()} AppServer ${errReason} ${500} ${err} ${stack}`);
res.status(500);
res.render('error', {
error: err,
stack: stack
});
}
}
close() {
this._app.close();
}
useClass(classType, methodType) {
new express_1.ExpressRouter(classType, methodType, this._app);
// let routers = new ExpressRouter(classType, methodType).routers;
// routers.map((router) => {
// this._app.use('/', router);
// });
// let router = new ExpressRouter(classType, methodType).router;
// let routerEventBus = new ExpressEventBus(classType, methodType).router;
// this._app.use(router);
//this._app.use(routerEventBus);
}
_send(params, methodus, paramsMap, securityContext) {
const request = new Request_1.Request();
let baseUrl = methodus.resolver();
if (baseUrl) {
let myUri = baseUrl + methodus.route;
return request.sendRequest(methodus.verb, baseUrl + methodus.route, params, paramsMap, securityContext);
}
else {
return new _1.MethodError('no server found for this method' + methodus.route, 302);
}
}
_sendEvent(methodEvent) {
return __awaiter(this, void 0, void 0, function* () {
});
}
};
__decorate([
log_1.Log(),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object, Object]),
__metadata("design:returntype", void 0)
], Express.prototype, "useClass", null);
__decorate([
log_1.Log(),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object, Object, Object, Object]),
__metadata("design:returntype", void 0)
], Express.prototype, "_send", null);
__decorate([
log_1.Log(),
__metadata("design:type", Function),
__metadata("design:paramtypes", [_1.MethodEvent]),
__metadata("design:returntype", Promise)
], Express.prototype, "_sendEvent", null);
Express = __decorate([
log_1.LogClass(log_1.logger),
__metadata("design:paramtypes", [Object, Object])
], Express);
exports.Express = Express;
//# sourceMappingURL=express.js.map