ts-api-core
Version:
Nodejs api framework core
152 lines • 6.38 kB
JavaScript
;
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