UNPKG

ts-api-core

Version:

Nodejs api framework core

152 lines 6.38 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.WebServer = exports.ServerConfig = void 0; const base_controller_1 = require("../controller/base.controller"); const mvc_register_1 = require("../mvc/mvc.register"); const routes_register_1 = require("../base/routes.register"); const base_wrapper_1 = require("../wrapper/base.wrapper"); const route_doc_controller_1 = require("../controller/route.doc.controller"); const app_1 = require("../base/app"); const package_loader_1 = require("../utils/package.loader"); const log_leval_1 = require("../model/log.leval"); const ioc_decorator_1 = require("../mvc/ioc.decorator"); /** 服务配置 */ class ServerConfig { } exports.ServerConfig = ServerConfig; /** WEB 服务 */ class WebServer { /** * WEB 服务 * @param options 配置选项 */ constructor(options) { var _a, _b, _c, _d, _e, _f, _g, _h; this.options = options; const app = WebServer.express(); const { urlencoded, json } = package_loader_1.PackageLoader.load('body-parser'); app.set("etag", (_a = options.setETag) !== null && _a !== void 0 ? _a : false); app.disable("x-powered-by"); app.use(urlencoded({ limit: (_b = options.limitUrlSize) !== null && _b !== void 0 ? _b : "10000kb", extended: false })); app.use(json({ limit: (_c = options.limitBodySize) !== null && _c !== void 0 ? _c : "10000kb" })); this.ConfigCors(app, options); const controllers = (_d = options.controller) !== null && _d !== void 0 ? _d : []; const routesClass = (_e = options.routes) !== null && _e !== void 0 ? _e : []; const wrappers = (_f = options.wrappers) !== null && _f !== void 0 ? _f : new Map(); controllers.push(route_doc_controller_1.RouteDocController); if (options.loadOpts) { ioc_decorator_1.IocContainer.loadDirectory(options.loadOpts, (target, file) => { if (ioc_decorator_1.IocContainer.isClass(target)) { if (this.isController(target)) { controllers.push(target); } else if (this.isRouteConfig(target)) { routesClass.push(target); } else if (this.isWrapper(target)) { const [def, id] = ioc_decorator_1.IocContainer.getDefinition(target); if (id) { wrappers.set(id, target); } } } }); } const logger = (_g = options.logger) !== null && _g !== void 0 ? _g : app_1.App.resolve('SaveLogger'); this.registerRoutes = new routes_register_1.RoutesRegister(app, routesClass, [], wrappers, logger); this.registerRoutes.register(); (0, mvc_register_1.RegisterService)(app, controllers, logger); this.ConfigAction(app); this.Config404(app); this.Config500(app); this.port = (_h = options.port) !== null && _h !== void 0 ? _h : 8080; if (this.port > 0) { app.listen(this.port, () => { var _a; // eslint-disable-next-line no-console console.log(`${(_a = options.name) !== null && _a !== void 0 ? _a : ''}服务启动成功,端口号:${this.port}`); }); } else if (logger) { logger.log(log_leval_1.LogLevel.warn, '服务启动失败,未配置正确的端口号'); } else { // eslint-disable-next-line no-console console.warn('服务启动失败,未配置正确的端口号'); } } static get express() { if (!this._express) { this._express = package_loader_1.PackageLoader.load('express'); } return this._express; } isController(target) { var _a; return ((_a = target.prototype.$Meta) === null || _a === void 0 ? void 0 : _a.baseUrl) !== undefined && target.prototype instanceof base_controller_1.BaseController; } isRouteConfig(target) { return ioc_decorator_1.IocContainer.isRouteConfig(target); } isWrapper(target) { return ioc_decorator_1.IocContainer.isProvide(target) && target.prototype instanceof base_wrapper_1.BaseWrapper; } ConfigCors(app, options) { if (options.allowCrossDomain === false) { return; } app.use("*", (req, res, next) => { // 设置允许的自定义请求头 // const allowHeader = [ // "X-Requested-With", // "Origin", // "Host", // "Content-Type", // "Accept", // "esn", // "token", // "AppUserToken", // "appid", // "tenantid", // "tagid", // "mobilekey", // "client-src", // ] const allowHeader = [ "Content-Type", "Accept", "esn", "token", ]; if (options.allowHeader) { options.allowHeader.forEach((key) => { if (!allowHeader.includes(key)) { allowHeader.push(key); } }); } res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Credential", "true"); res.header("Access-Control-Allow-Methods", "*"); res.header("Access-Control-Allow-Headers", allowHeader.join(",")); next(); }); } ConfigAction(app) { app.all("*", (req, res, next) => { next(); }); } Config404(app) { app.use((req, res, next) => { res.status(404).json({ code: -1, msg: `${req.path} 未找到` }); }); } Config500(app) { app.use((err, req, res, next) => { res.status(500).json({ code: -1, msg: `服务器错误:${err.message}` }); }); } } exports.WebServer = WebServer; //# sourceMappingURL=web.server.js.map