cgserver 12.0.0 → 12.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/Framework/{ThirdParty → Server/RpcWebSocketServer}/CgMq.js +11 -6
- package/dist/lib/Framework/Server/{WebSocketServer → RpcWebSocketServer}/IRpc.js +4 -2
- package/dist/lib/Framework/Server/RpcWebSocketServer/IRpcClientWebSocket.js +253 -0
- package/dist/lib/Framework/Server/{WebSocketServer → RpcWebSocketServer}/IRpcServerWebSocket.js +16 -5
- package/dist/lib/Framework/Server/SocketServer/ISocketServer.js +17 -17
- package/dist/lib/Framework/Server/WebSocketServer/IClientWebSocket.js +1 -1
- package/dist/lib/Framework/Server/WebSocketServer/IWebSocketServer.js +3 -0
- package/dist/lib/Framework/ThirdParty/Rpc.js +15 -6
- package/dist/lib/Framework/index_export_.js +4 -4
- package/dist/types/Framework/{ThirdParty → Server/RpcWebSocketServer}/CgMq.d.ts +4 -4
- package/dist/types/Framework/{SocketServer → Server/RpcWebSocketServer}/IRpc.d.ts +3 -2
- package/dist/types/Framework/Server/{WebSocketServer → RpcWebSocketServer}/IRpcClientWebSocket.d.ts +6 -1
- package/dist/types/Framework/{SocketServer → Server/RpcWebSocketServer}/IRpcServerWebSocket.d.ts +2 -2
- package/dist/types/Framework/Server/SocketServer/IClientSocket.d.ts +1 -0
- package/dist/types/Framework/Server/SocketServer/IServerSocket.d.ts +1 -0
- package/dist/types/Framework/Server/SocketServer/ISocket.d.ts +1 -0
- package/dist/types/Framework/Server/SocketServer/ISocketServer.d.ts +3 -3
- package/dist/types/Framework/Server/SocketServer/PacketParser.d.ts +1 -0
- package/dist/types/Framework/Server/WebSocketServer/IClientWebSocket.d.ts +2 -2
- package/dist/types/Framework/Server/WebSocketServer/IWebSocketServer.d.ts +4 -1
- package/dist/types/Framework/ThirdParty/Rpc.d.ts +7 -5
- package/dist/types/Framework/index_export_.d.ts +4 -4
- package/package.json +1 -1
- package/dist/lib/Framework/Database/MSSqlManager.js +0 -53
- package/dist/lib/Framework/Database/MysqlBaseService.js +0 -280
- package/dist/lib/Framework/Database/MysqlManager.js +0 -105
- package/dist/lib/Framework/Database/RedisManager.js +0 -60
- package/dist/lib/Framework/Server/WebSocketServer/IRpcClientWebSocket.js +0 -140
- package/dist/lib/Framework/SocketServer/IClientWebSocket.js +0 -44
- package/dist/lib/Framework/SocketServer/IRpc.js +0 -36
- package/dist/lib/Framework/SocketServer/IRpcClientWebSocket.js +0 -140
- package/dist/lib/Framework/SocketServer/IRpcServerWebSocket.js +0 -82
- package/dist/lib/Framework/SocketServer/IServerWebSocket.js +0 -95
- package/dist/lib/Framework/SocketServer/ISocketServer.js +0 -214
- package/dist/lib/Framework/SocketServer/IWebSocket.js +0 -215
- package/dist/lib/Framework/SocketServer/ProtoFilter/GoogleProtoFilter.js +0 -57
- package/dist/lib/Framework/SocketServer/ProtoFilter/IProtoFilter.js +0 -9
- package/dist/lib/Framework/SocketServer/ProtoFilter/JsonProtoFilter.js +0 -29
- package/dist/lib/Framework/SocketServer/ProtoFilter/ProtoFactory.js +0 -35
- package/dist/lib/Framework/ThirdParty/CgRankToo.js +0 -196
- package/dist/lib/Framework/WebServer/Controller/BaseController.js +0 -119
- package/dist/lib/Framework/WebServer/Controller/MongoBaseUserController.js +0 -171
- package/dist/lib/Framework/WebServer/Controller/MysqlBaseUserController.js +0 -169
- package/dist/lib/Framework/WebServer/Engine/ControllerManager.js +0 -115
- package/dist/lib/Framework/WebServer/Engine/Engine.js +0 -218
- package/dist/lib/Framework/WebServer/Engine/RazorJs.js +0 -543
- package/dist/lib/Framework/WebServer/Engine/Request.js +0 -226
- package/dist/lib/Framework/WebServer/Engine/Response.js +0 -87
- package/dist/lib/Framework/WebServer/IWebServer.js +0 -55
- package/dist/types/Framework/Database/MSSqlManager.d.ts +0 -26
- package/dist/types/Framework/Database/MysqlBaseService.d.ts +0 -34
- package/dist/types/Framework/Database/MysqlManager.d.ts +0 -30
- package/dist/types/Framework/Database/RedisManager.d.ts +0 -24
- package/dist/types/Framework/Server/WebSocketServer/IRpc.d.ts +0 -32
- package/dist/types/Framework/Server/WebSocketServer/IRpcServerWebSocket.d.ts +0 -23
- package/dist/types/Framework/SocketServer/IClientWebSocket.d.ts +0 -17
- package/dist/types/Framework/SocketServer/IRpcClientWebSocket.d.ts +0 -29
- package/dist/types/Framework/SocketServer/IServerWebSocket.d.ts +0 -38
- package/dist/types/Framework/SocketServer/ISocketServer.d.ts +0 -46
- package/dist/types/Framework/SocketServer/IWebSocket.d.ts +0 -76
- package/dist/types/Framework/SocketServer/ProtoFilter/GoogleProtoFilter.d.ts +0 -9
- package/dist/types/Framework/SocketServer/ProtoFilter/IProtoFilter.d.ts +0 -10
- package/dist/types/Framework/SocketServer/ProtoFilter/JsonProtoFilter.d.ts +0 -6
- package/dist/types/Framework/SocketServer/ProtoFilter/ProtoFactory.d.ts +0 -12
- package/dist/types/Framework/ThirdParty/CgRankToo.d.ts +0 -103
- package/dist/types/Framework/WebServer/Controller/BaseController.d.ts +0 -34
- package/dist/types/Framework/WebServer/Controller/MongoBaseUserController.d.ts +0 -28
- package/dist/types/Framework/WebServer/Controller/MysqlBaseUserController.d.ts +0 -27
- package/dist/types/Framework/WebServer/Engine/ControllerManager.d.ts +0 -37
- package/dist/types/Framework/WebServer/Engine/Engine.d.ts +0 -44
- package/dist/types/Framework/WebServer/Engine/RazorJs.d.ts +0 -21
- package/dist/types/Framework/WebServer/Engine/Request.d.ts +0 -50
- package/dist/types/Framework/WebServer/Engine/Response.d.ts +0 -26
- package/dist/types/Framework/WebServer/IWebServer.d.ts +0 -22
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.gCtrMgr = exports.ControllerManager = void 0;
|
|
4
|
-
/**
|
|
5
|
-
* web服务中mvc的控制器管理器
|
|
6
|
-
*/
|
|
7
|
-
class ControllerManager {
|
|
8
|
-
_static_ctr = {};
|
|
9
|
-
_ctr_cls = {};
|
|
10
|
-
//module ctrname lower normal
|
|
11
|
-
_cache_action_names = {};
|
|
12
|
-
registerController(module_name, ctr_name, cls) {
|
|
13
|
-
module_name = module_name.toLowerCase();
|
|
14
|
-
ctr_name = ctr_name.toLowerCase();
|
|
15
|
-
if (module_name == ctr_name) {
|
|
16
|
-
throw ("模块名称不能和控制器名称相同:" + module_name);
|
|
17
|
-
}
|
|
18
|
-
this._ctr_cls[module_name] = this._ctr_cls[module_name] || {};
|
|
19
|
-
this._ctr_cls[module_name][ctr_name] = cls;
|
|
20
|
-
this._cacheActionName(module_name, ctr_name, cls);
|
|
21
|
-
}
|
|
22
|
-
_cacheActionName(module_name, ctr_name, cls) {
|
|
23
|
-
module_name = module_name.toLowerCase();
|
|
24
|
-
ctr_name = ctr_name.toLowerCase();
|
|
25
|
-
//不能通过cls.name来获取ctr名称,因为混淆之后类名会变化
|
|
26
|
-
let prototype = cls.prototype;
|
|
27
|
-
let map_names = {};
|
|
28
|
-
while (prototype && prototype.constructor.name != "BaseController") {
|
|
29
|
-
let names = Object.getOwnPropertyNames(prototype);
|
|
30
|
-
for (let action_name of names) {
|
|
31
|
-
if (action_name.indexOf("on") != 0
|
|
32
|
-
&& action_name.indexOf("show") != 0) {
|
|
33
|
-
continue;
|
|
34
|
-
}
|
|
35
|
-
if (map_names[action_name.toLowerCase()]) {
|
|
36
|
-
continue;
|
|
37
|
-
}
|
|
38
|
-
map_names[action_name.toLowerCase()] = action_name;
|
|
39
|
-
}
|
|
40
|
-
prototype = Object.getPrototypeOf(prototype);
|
|
41
|
-
}
|
|
42
|
-
this._cache_action_names[module_name] = this._cache_action_names[module_name] || {};
|
|
43
|
-
this._cache_action_names[module_name][ctr_name] = map_names;
|
|
44
|
-
}
|
|
45
|
-
getActionName(module_name, ctr_name, action_name) {
|
|
46
|
-
module_name = module_name.toLowerCase();
|
|
47
|
-
ctr_name = ctr_name.toLowerCase();
|
|
48
|
-
action_name = action_name.toLowerCase();
|
|
49
|
-
if (!this._cache_action_names[module_name]) {
|
|
50
|
-
return null;
|
|
51
|
-
}
|
|
52
|
-
if (!this._cache_action_names[module_name][ctr_name]) {
|
|
53
|
-
return null;
|
|
54
|
-
}
|
|
55
|
-
return this._cache_action_names[module_name][ctr_name][action_name];
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* 静态ctr,这样,ctr就不会被多次创建
|
|
59
|
-
* @param module_name
|
|
60
|
-
* @param ctr_name
|
|
61
|
-
* @param obj
|
|
62
|
-
*/
|
|
63
|
-
registerStaticController(module_name, ctr_name, obj) {
|
|
64
|
-
module_name = module_name.toLowerCase();
|
|
65
|
-
ctr_name = ctr_name.toLowerCase();
|
|
66
|
-
this._static_ctr[module_name] = this._static_ctr[module_name] || {};
|
|
67
|
-
this._static_ctr[module_name][ctr_name] = obj;
|
|
68
|
-
this._cacheActionNameForStatic(module_name, ctr_name, obj);
|
|
69
|
-
}
|
|
70
|
-
_cacheActionNameForStatic(module_name, ctr_name, obj) {
|
|
71
|
-
module_name = module_name.toLowerCase();
|
|
72
|
-
ctr_name = ctr_name.toLowerCase();
|
|
73
|
-
let prototype = Object.getPrototypeOf(obj);
|
|
74
|
-
let map_names = {};
|
|
75
|
-
while (prototype && prototype.constructor.name != "BaseController") {
|
|
76
|
-
let names = Object.getOwnPropertyNames(prototype);
|
|
77
|
-
for (let func_name of names) {
|
|
78
|
-
let low_name = func_name.toLowerCase();
|
|
79
|
-
if (!map_names[low_name]) //有可能遭遇重载
|
|
80
|
-
{
|
|
81
|
-
map_names[low_name] = func_name;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
prototype = Object.getPrototypeOf(prototype);
|
|
85
|
-
}
|
|
86
|
-
this._cache_action_names[module_name] = this._cache_action_names[module_name] || {};
|
|
87
|
-
this._cache_action_names[module_name][ctr_name] = map_names;
|
|
88
|
-
}
|
|
89
|
-
getStaticCtr(module_name, controller_name) {
|
|
90
|
-
if (module_name) {
|
|
91
|
-
module_name = module_name.toLowerCase();
|
|
92
|
-
}
|
|
93
|
-
if (controller_name) {
|
|
94
|
-
controller_name = controller_name.toLowerCase();
|
|
95
|
-
}
|
|
96
|
-
if (!this._static_ctr[module_name]) {
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
99
|
-
return this._static_ctr[module_name][controller_name];
|
|
100
|
-
}
|
|
101
|
-
getClass(module_name, controller_name) {
|
|
102
|
-
if (module_name) {
|
|
103
|
-
module_name = module_name.toLowerCase();
|
|
104
|
-
}
|
|
105
|
-
if (controller_name) {
|
|
106
|
-
controller_name = controller_name.toLowerCase();
|
|
107
|
-
}
|
|
108
|
-
if (!this._ctr_cls[module_name]) {
|
|
109
|
-
return;
|
|
110
|
-
}
|
|
111
|
-
return this._ctr_cls[module_name][controller_name];
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
exports.ControllerManager = ControllerManager;
|
|
115
|
-
exports.gCtrMgr = new ControllerManager();
|
|
@@ -1,218 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Engine = void 0;
|
|
4
|
-
const Response_1 = require("./Response");
|
|
5
|
-
const Request_1 = require("./Request");
|
|
6
|
-
const http = require("http");
|
|
7
|
-
const https = require("https");
|
|
8
|
-
const cors = require("cors");
|
|
9
|
-
const Express = require("express");
|
|
10
|
-
const cookieParser = require("cookie-parser");
|
|
11
|
-
const Config_1 = require("../../Config/Config");
|
|
12
|
-
const Log_1 = require("../../Logic/Log");
|
|
13
|
-
const ControllerManager_1 = require("./ControllerManager");
|
|
14
|
-
class Engine {
|
|
15
|
-
_app = Express();
|
|
16
|
-
get app() {
|
|
17
|
-
return this._app;
|
|
18
|
-
}
|
|
19
|
-
_cfg = null;
|
|
20
|
-
get cfg() {
|
|
21
|
-
return this._cfg;
|
|
22
|
-
}
|
|
23
|
-
_server = null;
|
|
24
|
-
_razorJs = null;
|
|
25
|
-
_root_path = process.cwd();
|
|
26
|
-
//停止服务器,暂时不接受任何请求
|
|
27
|
-
_is_running = false;
|
|
28
|
-
get isrunning() {
|
|
29
|
-
return this._is_running;
|
|
30
|
-
}
|
|
31
|
-
constructor(cfg, razorJs) {
|
|
32
|
-
this._cfg = cfg;
|
|
33
|
-
this._razorJs = razorJs;
|
|
34
|
-
}
|
|
35
|
-
start() {
|
|
36
|
-
let port = this._cfg.port;
|
|
37
|
-
//let https = require("https");
|
|
38
|
-
let fs = require("fs");
|
|
39
|
-
if (!port) {
|
|
40
|
-
Log_1.gLog.error(this._cfg);
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
if (this._cfg.ssl) {
|
|
44
|
-
const httpsOption = {
|
|
45
|
-
key: fs.readFileSync(Config_1.Config.rootDataDir + this._cfg.ssl.key),
|
|
46
|
-
cert: fs.readFileSync(Config_1.Config.rootDataDir + this._cfg.ssl.crt)
|
|
47
|
-
};
|
|
48
|
-
https.createServer(httpsOption, this._app).listen(port, () => {
|
|
49
|
-
this._is_running = true;
|
|
50
|
-
Log_1.gLog.info("Server(" + this._cfg.web_name + ") running at https://127.0.0.1:" + port + "/");
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
else {
|
|
54
|
-
http.createServer(this._app).listen(port, () => {
|
|
55
|
-
this._is_running = true;
|
|
56
|
-
Log_1.gLog.info("Server(" + this._cfg.web_name + ") running at http://127.0.0.1:" + port + "/");
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
this._app.use(cookieParser());
|
|
60
|
-
this._app.use(Express.raw());
|
|
61
|
-
this._app.use(Express.json({ limit: '10mb', verify(req, res, buf, encoding) {
|
|
62
|
-
req["rawBody"] = buf;
|
|
63
|
-
}, }));
|
|
64
|
-
this._app.use(Express.urlencoded({ limit: '10mb', extended: false, verify(req, res, buf, encoding) {
|
|
65
|
-
req["rawBody"] = buf;
|
|
66
|
-
}, }));
|
|
67
|
-
this._app.use((err, req, res, next) => {
|
|
68
|
-
if (err) {
|
|
69
|
-
Log_1.gLog.error(err);
|
|
70
|
-
}
|
|
71
|
-
next(err);
|
|
72
|
-
});
|
|
73
|
-
if (this._cfg.static) {
|
|
74
|
-
for (let i = 0; i < this._cfg.static.length; ++i) {
|
|
75
|
-
let item = this._cfg.static[i];
|
|
76
|
-
this._app.use(item.route, Express.static(item.path));
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
else {
|
|
80
|
-
//默认
|
|
81
|
-
this._app.use("/public", Express.static("./public"));
|
|
82
|
-
}
|
|
83
|
-
//处理跨域
|
|
84
|
-
if (this._cfg.cors) {
|
|
85
|
-
let origin = this._cfg.cors.origin || "*";
|
|
86
|
-
if (this._cfg.cors.credentials == true && origin == "*") {
|
|
87
|
-
origin = (origin, callback) => {
|
|
88
|
-
callback(null, true);
|
|
89
|
-
};
|
|
90
|
-
}
|
|
91
|
-
this._app.use(cors({
|
|
92
|
-
origin: origin,
|
|
93
|
-
methods: this._cfg.cors.methods || 'GET,HEAD,PUT,PATCH,POST,DELETE,OPTIONS',
|
|
94
|
-
allowedHeaders: this._cfg.cors.allowedHeaders || ['Content-Type'],
|
|
95
|
-
credentials: this._cfg.cors.credentials || false
|
|
96
|
-
}));
|
|
97
|
-
}
|
|
98
|
-
this._app.all("/*", (req, res) => {
|
|
99
|
-
let time = Date.now();
|
|
100
|
-
this._onall(req, res).then(() => {
|
|
101
|
-
if (this._cfg.debug) {
|
|
102
|
-
let time_str = (Date.now() - time) + "ms";
|
|
103
|
-
Log_1.gLog.info("[" + time_str + "] " + req.method + " " + req.url);
|
|
104
|
-
}
|
|
105
|
-
}).catch((err) => {
|
|
106
|
-
res.sendStatus(500);
|
|
107
|
-
let exreq = new Request_1.Request(req, this._cfg);
|
|
108
|
-
let info = exreq.getDebugInfo();
|
|
109
|
-
info["tip"] = "server error";
|
|
110
|
-
Log_1.gLog.error(info);
|
|
111
|
-
Log_1.gLog.error(err);
|
|
112
|
-
});
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
async _onall(_req, _res) {
|
|
116
|
-
let httpinfo = this._preDoHttpInfo(_req, _res);
|
|
117
|
-
if (!httpinfo) {
|
|
118
|
-
return;
|
|
119
|
-
}
|
|
120
|
-
await this._callCtrAction(httpinfo.action_name, httpinfo.req, httpinfo.res);
|
|
121
|
-
}
|
|
122
|
-
_method_preactions = {
|
|
123
|
-
"post": "on",
|
|
124
|
-
"get": "show",
|
|
125
|
-
"options": "onoptions",
|
|
126
|
-
"head": "onhead"
|
|
127
|
-
};
|
|
128
|
-
/**
|
|
129
|
-
* 预处理http请求信息
|
|
130
|
-
* @param _req
|
|
131
|
-
* @param _res
|
|
132
|
-
* @returns
|
|
133
|
-
*/
|
|
134
|
-
_preDoHttpInfo(_req, _res) {
|
|
135
|
-
let req = new Request_1.Request(_req, this._cfg);
|
|
136
|
-
let res = new Response_1.Response(_res, this._cfg);
|
|
137
|
-
//禁止访问
|
|
138
|
-
if (!this._is_running) {
|
|
139
|
-
res.sendStatus(403);
|
|
140
|
-
return;
|
|
141
|
-
}
|
|
142
|
-
let method = req.method.toLocaleLowerCase();
|
|
143
|
-
let pre_action = this._method_preactions[method];
|
|
144
|
-
if (!pre_action) {
|
|
145
|
-
res.sendStatus(500);
|
|
146
|
-
let info = req.getDebugInfo();
|
|
147
|
-
info["tip"] = "not support method:" + method;
|
|
148
|
-
Log_1.gLog.error(info);
|
|
149
|
-
return null;
|
|
150
|
-
}
|
|
151
|
-
let action_name = ControllerManager_1.gCtrMgr.getActionName(req.module, req.controller, pre_action + req.action);
|
|
152
|
-
if (!action_name) {
|
|
153
|
-
res.sendStatus(500);
|
|
154
|
-
let info = req.getDebugInfo();
|
|
155
|
-
info["tip"] = "request has no action";
|
|
156
|
-
Log_1.gLog.error(info);
|
|
157
|
-
return null;
|
|
158
|
-
}
|
|
159
|
-
return {
|
|
160
|
-
action_name: action_name,
|
|
161
|
-
req: req,
|
|
162
|
-
res: res
|
|
163
|
-
};
|
|
164
|
-
}
|
|
165
|
-
async _callCtrAction(action_name, req, res) {
|
|
166
|
-
let ctr = ControllerManager_1.gCtrMgr.getStaticCtr(req.module, req.controller);
|
|
167
|
-
let cls_ctr = null;
|
|
168
|
-
if (!ctr) {
|
|
169
|
-
cls_ctr = ControllerManager_1.gCtrMgr.getClass(req.module, req.controller);
|
|
170
|
-
}
|
|
171
|
-
if (!ctr) {
|
|
172
|
-
ctr = new cls_ctr(req, res, this);
|
|
173
|
-
await ctr.init();
|
|
174
|
-
}
|
|
175
|
-
else {
|
|
176
|
-
ctr.initStatic(req, res, this);
|
|
177
|
-
}
|
|
178
|
-
await ctr[action_name].call(ctr);
|
|
179
|
-
}
|
|
180
|
-
pause() {
|
|
181
|
-
if (!this._is_running) {
|
|
182
|
-
Log_1.gLog.error("webserver has paused:" + this._cfg.web_name);
|
|
183
|
-
return;
|
|
184
|
-
}
|
|
185
|
-
this._is_running = false;
|
|
186
|
-
Log_1.gLog.info("webserver paused:" + this._cfg.web_name);
|
|
187
|
-
}
|
|
188
|
-
resume() {
|
|
189
|
-
if (this._is_running) {
|
|
190
|
-
Log_1.gLog.error("webserver is running:" + this._cfg.web_name);
|
|
191
|
-
return;
|
|
192
|
-
}
|
|
193
|
-
this._is_running = true;
|
|
194
|
-
Log_1.gLog.info("webserver resumed:" + this._cfg.web_name);
|
|
195
|
-
}
|
|
196
|
-
getRenderHtml(req, res, datas) {
|
|
197
|
-
let rootview = this._cfg.rootview || "view";
|
|
198
|
-
if (!rootview.endsWith("/")) {
|
|
199
|
-
rootview += "/";
|
|
200
|
-
}
|
|
201
|
-
let tmpl = rootview + req.controller.toLowerCase() + "/" + req.action.toLowerCase();
|
|
202
|
-
let html = this._getRenderHtml(req, res, tmpl, datas);
|
|
203
|
-
return html;
|
|
204
|
-
}
|
|
205
|
-
_getRenderHtml(req, res, tmpl, params) {
|
|
206
|
-
let html = null;
|
|
207
|
-
try {
|
|
208
|
-
html = this._razorJs.render(req, res, tmpl, params, { compileDebug: true });
|
|
209
|
-
html = html.replace(/\"~/g, "\"" + req.root);
|
|
210
|
-
html = html.replace(/\'~/g, "\'" + req.root);
|
|
211
|
-
}
|
|
212
|
-
catch (e) {
|
|
213
|
-
html = "error!" + e;
|
|
214
|
-
}
|
|
215
|
-
return html;
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
exports.Engine = Engine;
|