diff --git a/package.json b/package.json index 10cb072..bb226d3 100755 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "@midwayjs/core": "^2.14.0", "@midwayjs/decorator": "^2.14.0", "@midwayjs/orm": "^2.14.0", + "@midwayjs/swagger": "^1.3.0", "@midwayjs/view-nunjucks": "^2.14.0", "@midwayjs/web": "^2.13.4", "egg": "^2.33.1", @@ -41,6 +42,7 @@ "cross-env": "^7.0.3", "jest": "^27.4.3", "mwts": "^1.3.0", + "swagger-ui-dist": "^4.1.3", "ts-jest": "^27.1.0", "typescript": "^4.5.2" }, diff --git a/src/app/modules/base/config.ts b/src/app/modules/base/config.ts index ccd4b7f..f08a4a3 100644 --- a/src/app/modules/base/config.ts +++ b/src/app/modules/base/config.ts @@ -11,7 +11,11 @@ export default (app: Application) => { // 模块描述 description: '基础的权限管理功能,包括登录,权限校验', // 中间件 - globalMiddlewares: ['baseAuthorityMiddleware', 'baseLogMiddleware'], + globalMiddlewares: [ + 'baseAuthorityMiddleware', + 'baseLogMiddleware', + 'baseSwaggerMiddleware', + ], // jwt 生成解密token的 jwt: { // 注意: 最好重新修改,防止破解 diff --git a/src/app/modules/base/middleware/swagger.ts b/src/app/modules/base/middleware/swagger.ts new file mode 100644 index 0000000..cde907f --- /dev/null +++ b/src/app/modules/base/middleware/swagger.ts @@ -0,0 +1,27 @@ +import { Provide } from '@midwayjs/decorator'; +import { IWebMiddleware, IMidwayWebNext } from '@midwayjs/web'; +import { Context } from 'egg'; +import * as _ from 'lodash'; + +/** + * swagger + */ +@Provide() +export class BaseSwaggerMiddleware implements IWebMiddleware { + resolve() { + return async (ctx: Context, next: IMidwayWebNext) => { + const { url } = ctx; + await next(); + if (_.startsWith(url, '/swagger-ui/json')) { + ctx.body.components.securitySchemes = { + Authorization: { + type: 'apiKey', + name: 'Authorization', + in: 'header', + }, + }; + ctx.body.security = [{ Authorization: [] }]; + } + }; + } +} diff --git a/src/app/modules/demo/controller/app/goods.ts b/src/app/modules/demo/controller/app/goods.ts index a5973a8..48ecf1f 100644 --- a/src/app/modules/demo/controller/app/goods.ts +++ b/src/app/modules/demo/controller/app/goods.ts @@ -1,4 +1,4 @@ -import { Get, Inject, Provide } from '@midwayjs/decorator'; +import { Get, Inject, Provide, Query } from '@midwayjs/decorator'; import { CoolController, BaseController, CoolUrlTag } from '@cool-midway/core'; import { DemoGoodsEntity } from '../../entity/goods'; import { DemoGoodsService } from '../../service/goods'; @@ -28,12 +28,13 @@ export class DemoAppGoodsController extends BaseController { demoGoodsService: DemoGoodsService; /** - * 请求所有数据 + * 请求所有 + * @param name 名称 * @returns */ @CoolUrlTag('ignoreToken') @Get('/all', { summary: '获得所有' }) - async all() { + async all(@Query() name: string, @Query() age: number) { return this.ok(await this.demoGoodsService.all()); } } diff --git a/src/app/modules/demo/controller/app/swagger.ts b/src/app/modules/demo/controller/app/swagger.ts new file mode 100644 index 0000000..0f58766 --- /dev/null +++ b/src/app/modules/demo/controller/app/swagger.ts @@ -0,0 +1,23 @@ +import { Get, Provide, Query } from '@midwayjs/decorator'; +import { CoolController, BaseController } from '@cool-midway/core'; +import { CreateApiDoc } from '@midwayjs/swagger'; + +/** + * swagger + */ +@Provide() +@CoolController(null, { + tagName: 'swagger 文档', + description: 'swagger 文档演示', +}) +export class DemoSwaggerController extends BaseController { + @CreateApiDoc() + .summary('hello 接口') + .description('hello 接口功能描述') + .param('姓名') + .build() + @Get('/hello') + async hello(@Query() name: string) { + return this.ok(`你好:${name}!!`); + } +} diff --git a/src/config/config.local.ts b/src/config/config.local.ts index 2457171..f8d399f 100644 --- a/src/config/config.local.ts +++ b/src/config/config.local.ts @@ -20,8 +20,6 @@ export default (appInfo: EggAppInfo) => { charset: 'utf8mb4', // 驱动 driver: require('mysql2'), - // 设置时区 - timezone: '+8:00', }; config.logger = { diff --git a/src/config/config.prod.ts b/src/config/config.prod.ts index ce3cf7a..71d19b5 100644 --- a/src/config/config.prod.ts +++ b/src/config/config.prod.ts @@ -20,8 +20,6 @@ export default (appInfo: EggAppInfo) => { charset: 'utf8mb4', // 驱动 driver: require('mysql2'), - // 设置时区 - timezone: '+8:00', }; config.logger = { diff --git a/src/configuration.ts b/src/configuration.ts index c8ae93b..bd3298e 100644 --- a/src/configuration.ts +++ b/src/configuration.ts @@ -4,6 +4,7 @@ import { Application } from 'egg'; import * as view from '@midwayjs/view-nunjucks'; import * as orm from '@midwayjs/orm'; import * as cool from '@cool-midway/core'; +import * as swagger from '@midwayjs/swagger'; // import * as wxpay from '@cool-midway/wxpay'; // import * as oss from '@cool-midway/oss'; // import * as redis from '@cool-midway/redis'; @@ -18,6 +19,11 @@ import * as cool from '@cool-midway/core'; view, // 必须,不可移除, https://typeorm.io 打不开? https://typeorm.biunav.com/zh/ orm, + // swagger文档 访问地址 http://127.0.0.1:8001/swagger-ui/index.html + { + component: swagger, + enabledEnvironment: ['local'], + }, // 必须,不可移除, cool-admin 官方组件 https://www.cool-js.com cool, // oss插件,需要到后台配置之后才有用,默认是本地上传