From c50a1923f49f47d1ca82758a3c4b176b858019a6 Mon Sep 17 00:00:00 2001 From: Junyi Date: Fri, 2 Sep 2022 11:44:22 +0800 Subject: [PATCH] refactor(server) (#795) * refactor(server): refactor code * fix(server): fix satisfy check of semver --- packages/core/actions/src/__tests__/index.ts | 2 +- .../server/src/__tests__/application.test.ts | 2 +- packages/core/server/src/application.ts | 2 +- packages/core/server/src/helper.ts | 2 +- .../server/src/middlewares/table2resource.ts | 74 +++++++++---------- packages/core/server/src/plugin-manager.ts | 4 +- packages/plugins/client/src/server.ts | 28 +++---- 7 files changed, 55 insertions(+), 59 deletions(-) diff --git a/packages/core/actions/src/__tests__/index.ts b/packages/core/actions/src/__tests__/index.ts index bfad5a9c8..246e40e2e 100644 --- a/packages/core/actions/src/__tests__/index.ts +++ b/packages/core/actions/src/__tests__/index.ts @@ -118,7 +118,7 @@ export class MockServer extends Koa { await next(); }); this.use(bodyParser()); - this.use(table2resource()); + this.use(table2resource); this.use( this.resourcer.restApiMiddleware({ prefix: '/api', diff --git a/packages/core/server/src/__tests__/application.test.ts b/packages/core/server/src/__tests__/application.test.ts index d3c4838d2..2d03d372b 100644 --- a/packages/core/server/src/__tests__/application.test.ts +++ b/packages/core/server/src/__tests__/application.test.ts @@ -119,7 +119,7 @@ describe('application', () => { }); await next(); }); - console.log(app.middleware); + const response = await agent.get('/api/foos/1/bars'); expect(response.body).toEqual([1, 2]); }); diff --git a/packages/core/server/src/application.ts b/packages/core/server/src/application.ts index 11a99b8dc..012c0c875 100644 --- a/packages/core/server/src/application.ts +++ b/packages/core/server/src/application.ts @@ -121,7 +121,7 @@ export class ApplicationVersion { if (!version) { return true; } - return semver.satisfies(version, range); + return semver.satisfies(version, range, { includePrerelease: true }); } return true; } diff --git a/packages/core/server/src/helper.ts b/packages/core/server/src/helper.ts index 57c789115..07e357c3d 100644 --- a/packages/core/server/src/helper.ts +++ b/packages/core/server/src/helper.ts @@ -71,6 +71,6 @@ export function registerMiddlewares(app: Application, options: ApplicationOption app.use(dataWrapping()); } - app.use(table2resource()); + app.use(table2resource); app.use(app.resourcer.restApiMiddleware()); } diff --git a/packages/core/server/src/middlewares/table2resource.ts b/packages/core/server/src/middlewares/table2resource.ts index 610909bae..ce75dfbc3 100644 --- a/packages/core/server/src/middlewares/table2resource.ts +++ b/packages/core/server/src/middlewares/table2resource.ts @@ -1,45 +1,43 @@ import { getNameByParams, parseRequest, ResourcerContext, ResourceType } from '@nocobase/resourcer'; import Database from '@nocobase/database'; -export function table2resource() { - return async function table2resource(ctx: ResourcerContext & { db: Database }, next: () => Promise) { - const resourcer = ctx.resourcer; - const database = ctx.db; - let params = parseRequest( - { - path: ctx.request.path, - method: ctx.request.method, - }, - { - prefix: resourcer.options.prefix, - accessors: resourcer.options.accessors, - }, - ); - if (!params) { - return next(); - } - const resourceName = getNameByParams(params); - // 如果资源名称未被定义 - if (resourcer.isDefined(resourceName)) { - return next(); - } - const [collectionName, fieldName] = resourceName.split('.'); - // 如果经过加载后是已经定义的表 - if (!database.hasCollection(collectionName)) { - return next(); - } - const collection = database.getCollection(collectionName); - let resourceType: ResourceType = 'single'; - if (fieldName && collection.hasField(fieldName)) { - const field = collection.getField(fieldName); - resourceType = field.type; - } - resourcer.define({ - type: resourceType, - name: resourceName, - }); +export function table2resource(ctx: ResourcerContext & { db: Database }, next: () => Promise) { + const resourcer = ctx.resourcer; + const database = ctx.db; + let params = parseRequest( + { + path: ctx.request.path, + method: ctx.request.method, + }, + { + prefix: resourcer.options.prefix, + accessors: resourcer.options.accessors, + }, + ); + if (!params) { return next(); - }; + } + const resourceName = getNameByParams(params); + // 如果资源名称未被定义 + if (resourcer.isDefined(resourceName)) { + return next(); + } + const [collectionName, fieldName] = resourceName.split('.'); + // 如果经过加载后是已经定义的表 + if (!database.hasCollection(collectionName)) { + return next(); + } + const collection = database.getCollection(collectionName); + let resourceType: ResourceType = 'single'; + if (fieldName && collection.hasField(fieldName)) { + const field = collection.getField(fieldName); + resourceType = field.type; + } + resourcer.define({ + type: resourceType, + name: resourceName, + }); + return next(); } export default table2resource; diff --git a/packages/core/server/src/plugin-manager.ts b/packages/core/server/src/plugin-manager.ts index 2fb52e7a0..8d8ce5db4 100644 --- a/packages/core/server/src/plugin-manager.ts +++ b/packages/core/server/src/plugin-manager.ts @@ -12,6 +12,8 @@ export interface InstallOptions { sync?: SyncOptions; } +type PluginConstructor = { new(app: Application, options: O): P }; + export class PluginManager { app: Application; protected plugins = new Map(); @@ -28,7 +30,7 @@ export class PluginManager { return this.plugins.get(name); } - add

(pluginClass: any, options?: O): P { + add

(pluginClass: PluginConstructor, options?: O): P { const instance = new pluginClass(this.app, options); const name = instance.getName(); diff --git a/packages/plugins/client/src/server.ts b/packages/plugins/client/src/server.ts index eef594b4e..43a0e0b50 100644 --- a/packages/plugins/client/src/server.ts +++ b/packages/plugins/client/src/server.ts @@ -77,22 +77,18 @@ export class ClientPlugin extends Plugin { if (!isAbsolute(root)) { root = resolve(process.cwd(), root); } - this.app.middleware.unshift(async (ctx, next) => { - if (process.env.APP_ENV === 'production') { - return next(); - } - if (!root) { - return next(); - } - if (ctx.path.startsWith(this.app.resourcer.options.prefix)) { - return next(); - } - await serve(root)(ctx, next); - // console.log('koa-send', root, ctx.status); - if (ctx.status == 404) { - return send(ctx, 'index.html', { root }); - } - }); + if (process.env.APP_ENV !== 'production' && root) { + this.app.middleware.unshift(async (ctx, next) => { + if (ctx.path.startsWith(this.app.resourcer.options.prefix)) { + return next(); + } + await serve(root)(ctx, next); + // console.log('koa-send', root, ctx.status); + if (ctx.status == 404) { + return send(ctx, 'index.html', { root }); + } + }); + } } getName(): string {