oak-backend-base 4.1.15 → 4.1.16
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/lib/AppLoader.js +45 -23
- package/lib/ClusterAppLoader.js +1 -0
- package/lib/cluster/env.js +2 -0
- package/package.json +3 -3
package/lib/AppLoader.js
CHANGED
|
@@ -16,6 +16,7 @@ const dependencyBuilder_1 = require("oak-domain/lib/compiler/dependencyBuilder")
|
|
|
16
16
|
const DataSubscriber_1 = tslib_1.__importDefault(require("./cluster/DataSubscriber"));
|
|
17
17
|
const env_1 = require("./cluster/env");
|
|
18
18
|
const Synchronizer_1 = tslib_1.__importDefault(require("./Synchronizer"));
|
|
19
|
+
const i18n_1 = tslib_1.__importDefault(require("oak-domain/lib/data/i18n"));
|
|
19
20
|
class AppLoader extends types_1.AppLoader {
|
|
20
21
|
dbStore;
|
|
21
22
|
aspectDict;
|
|
@@ -168,10 +169,10 @@ class AppLoader extends types_1.AppLoader {
|
|
|
168
169
|
// 从aspect过来的,不能有空cxtString,以防被误判为root
|
|
169
170
|
const context = await this.makeContext(contextString || '{}', headers);
|
|
170
171
|
const fn = this.aspectDict[name];
|
|
171
|
-
if (!fn) {
|
|
172
|
-
throw new Error(`不存在的接口名称: ${name}`);
|
|
173
|
-
}
|
|
174
172
|
try {
|
|
173
|
+
if (!fn) {
|
|
174
|
+
throw new Error(`不存在的接口名称: ${name}`);
|
|
175
|
+
}
|
|
175
176
|
const result = await fn(params, context);
|
|
176
177
|
await context.refineOpRecords();
|
|
177
178
|
const { opRecords } = context;
|
|
@@ -185,12 +186,24 @@ class AppLoader extends types_1.AppLoader {
|
|
|
185
186
|
}
|
|
186
187
|
catch (err) {
|
|
187
188
|
await context.rollback();
|
|
189
|
+
if (err instanceof types_1.OakException) {
|
|
190
|
+
throw err;
|
|
191
|
+
}
|
|
192
|
+
if (err instanceof Error) {
|
|
193
|
+
const exception = await context.tryDeduceException(err);
|
|
194
|
+
if (exception) {
|
|
195
|
+
throw exception;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
188
198
|
throw err;
|
|
189
199
|
}
|
|
190
200
|
}
|
|
191
201
|
async initialize() {
|
|
192
202
|
await this.dbStore.initialize({ ifExists: 'dropIfNotStatic' });
|
|
193
203
|
const data = this.requireSth('lib/data/index');
|
|
204
|
+
// oak-domain中只有i18n
|
|
205
|
+
(0, assert_1.default)(data.i18n);
|
|
206
|
+
data.i18n.push(...i18n_1.default);
|
|
194
207
|
const context = this.contextBuilder(this.dbStore);
|
|
195
208
|
context.openRootMode();
|
|
196
209
|
for (const entity in data) {
|
|
@@ -253,29 +266,38 @@ class AppLoader extends types_1.AppLoader {
|
|
|
253
266
|
const transformEndpointItem = (key, item) => {
|
|
254
267
|
const { name, method, fn, params: itemParams } = item;
|
|
255
268
|
const k = `${key}-${name}-${method}`;
|
|
269
|
+
const makeEndpoint = async () => {
|
|
270
|
+
endPointMap[k] = true;
|
|
271
|
+
let url = `${prefix}/${key}`;
|
|
272
|
+
if (itemParams) {
|
|
273
|
+
for (const p of itemParams) {
|
|
274
|
+
url += `/:${p}`;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
endPointRouters.push([name, method, url, async (params, headers, req, body) => {
|
|
278
|
+
const context = await this.makeContext(undefined, headers);
|
|
279
|
+
try {
|
|
280
|
+
const result = await fn(context, params, headers, req, body);
|
|
281
|
+
await context.commit();
|
|
282
|
+
return result;
|
|
283
|
+
}
|
|
284
|
+
catch (err) {
|
|
285
|
+
await context.rollback();
|
|
286
|
+
console.error(`endpoint「${key}」方法「${method}」出错`, err);
|
|
287
|
+
throw err;
|
|
288
|
+
}
|
|
289
|
+
}]);
|
|
290
|
+
};
|
|
256
291
|
if (endPointMap[k]) {
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
for (const p of itemParams) {
|
|
263
|
-
url += `/:${p}`;
|
|
292
|
+
if (process.env.NODE_ENV === 'development') {
|
|
293
|
+
// 这里发现在热重载模式下会出现报错,debug跟到requireSth发现问题,怀疑是node的require机制导致的,先加个容错,在其他环境肯定不会出现
|
|
294
|
+
console.warn(`endpoint中,url为「${key}」、名为${name}的方法「${method}」存在重复定义,将进行覆盖`);
|
|
295
|
+
makeEndpoint();
|
|
296
|
+
return;
|
|
264
297
|
}
|
|
298
|
+
throw new Error(`endpoint中,url为「${key}」、名为${name}的方法「${method}」存在重复定义`);
|
|
265
299
|
}
|
|
266
|
-
|
|
267
|
-
const context = await this.makeContext(undefined, headers);
|
|
268
|
-
try {
|
|
269
|
-
const result = await fn(context, params, headers, req, body);
|
|
270
|
-
await context.commit();
|
|
271
|
-
return result;
|
|
272
|
-
}
|
|
273
|
-
catch (err) {
|
|
274
|
-
await context.rollback();
|
|
275
|
-
console.error(`endpoint「${key}」方法「${method}」出错`, err);
|
|
276
|
-
throw err;
|
|
277
|
-
}
|
|
278
|
-
}]);
|
|
300
|
+
makeEndpoint();
|
|
279
301
|
};
|
|
280
302
|
if (endpoints) {
|
|
281
303
|
for (const router in endpoints) {
|
package/lib/ClusterAppLoader.js
CHANGED
|
@@ -114,6 +114,7 @@ class ClusterAppLoader extends AppLoader_1.AppLoader {
|
|
|
114
114
|
});
|
|
115
115
|
this.csTriggers = {};
|
|
116
116
|
const { name } = nsServer;
|
|
117
|
+
// 本机pm2的socketio连接,在cli中连接到adaptor之后,会被自然推到redis,这边继续保持pm2的socketio连接即可
|
|
117
118
|
const socketUrl = `http://localhost:${process.env.PM2_PORT || 8080}${name}`;
|
|
118
119
|
this.socket = (0, socket_io_client_1.io)(socketUrl, {
|
|
119
120
|
path: socketPath,
|
package/lib/cluster/env.js
CHANGED
|
@@ -35,10 +35,12 @@ function initialize() {
|
|
|
35
35
|
const usingCluster = true;
|
|
36
36
|
const instanceId = parseInt(instanceIdStr);
|
|
37
37
|
const instanceCount = parseInt(getProcessEnvOption('OAK_INSTANCE_CNT'));
|
|
38
|
+
const enableRedis = getProcessEnvOption('OAK_ENABLE_REDIS') === 'true';
|
|
38
39
|
return {
|
|
39
40
|
usingCluster,
|
|
40
41
|
instanceCount,
|
|
41
42
|
instanceId,
|
|
43
|
+
enableRedis,
|
|
42
44
|
};
|
|
43
45
|
}
|
|
44
46
|
return {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "oak-backend-base",
|
|
3
|
-
"version": "4.1.
|
|
3
|
+
"version": "4.1.16",
|
|
4
4
|
"description": "oak-backend-base",
|
|
5
5
|
"main": "lib/index",
|
|
6
6
|
"author": {
|
|
@@ -22,8 +22,8 @@
|
|
|
22
22
|
"node-schedule": "^2.1.0",
|
|
23
23
|
"oak-common-aspect": "^3.0.5",
|
|
24
24
|
"oak-db": "^3.3.5",
|
|
25
|
-
"oak-domain": "^5.1.
|
|
26
|
-
"oak-frontend-base": "^5.3.
|
|
25
|
+
"oak-domain": "^5.1.19",
|
|
26
|
+
"oak-frontend-base": "^5.3.27",
|
|
27
27
|
"socket.io": "^4.8.1",
|
|
28
28
|
"socket.io-client": "^4.7.2",
|
|
29
29
|
"uuid": "^8.3.2"
|