oak-backend-base 4.1.15 → 4.1.17

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 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
- throw new Error(`endpoint中,url为「${key}」、名为${name}的方法「${method}」存在重复定义`);
258
- }
259
- endPointMap[k] = true;
260
- let url = `${prefix}/${key}`;
261
- if (itemParams) {
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
- endPointRouters.push([name, method, url, async (params, headers, req, body) => {
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) {
@@ -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,
@@ -306,7 +306,7 @@ class Synchronizer {
306
306
  id: 1,
307
307
  },
308
308
  filter: {
309
- [types_1.TriggerDataAttribute]: {
309
+ [types_1.TriggerUuidAttribute]: {
310
310
  $exists: true,
311
311
  },
312
312
  }
@@ -322,6 +322,7 @@ class Synchronizer {
322
322
  targetEntity: 1,
323
323
  operatorId: 1,
324
324
  [types_1.TriggerDataAttribute]: 1,
325
+ [types_1.TriggerUuidAttribute]: 1,
325
326
  bornAt: 1,
326
327
  $$createAt$$: 1,
327
328
  $$seq$$: 1,
@@ -340,7 +341,7 @@ class Synchronizer {
340
341
  id: { $in: ids },
341
342
  },
342
343
  }, { dontCollect: true, forUpdate: true });
343
- dirtyOpers = dirtyOpers.filter(ele => !!ele[types_1.TriggerDataAttribute]);
344
+ dirtyOpers = dirtyOpers.filter(ele => !!ele[types_1.TriggerUuidAttribute]);
344
345
  if (dirtyOpers.length > 0) {
345
346
  for (const c in this.channelDict) {
346
347
  (0, assert_1.default)(this.channelDict[c].queue.length === 0);
@@ -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.15",
3
+ "version": "4.1.17",
4
4
  "description": "oak-backend-base",
5
5
  "main": "lib/index",
6
6
  "author": {
@@ -21,9 +21,9 @@
21
21
  "mysql2": "^2.3.3",
22
22
  "node-schedule": "^2.1.0",
23
23
  "oak-common-aspect": "^3.0.5",
24
- "oak-db": "^3.3.5",
25
- "oak-domain": "^5.1.16",
26
- "oak-frontend-base": "^5.3.25",
24
+ "oak-db": "^3.3.6",
25
+ "oak-domain": "^5.1.21",
26
+ "oak-frontend-base": "^5.3.29",
27
27
  "socket.io": "^4.8.1",
28
28
  "socket.io-client": "^4.7.2",
29
29
  "uuid": "^8.3.2"