Skip to content

Commit 6d65a94

Browse files
committed
feat: 增加相关逻辑
1 parent da32e61 commit 6d65a94

File tree

15 files changed

+394
-324
lines changed

15 files changed

+394
-324
lines changed

README.md

Lines changed: 87 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -32,27 +32,104 @@ npm install -D @micro-app/plugin-koa
3232

3333
## Usage
3434

35+
### 在 microapp/config 中配置
36+
37+
```js
38+
'use strict';
39+
40+
module.exports = {
41+
...
42+
alias: {
43+
config: './src/config',
44+
helper: './src/helper',
45+
service: './src/service',
46+
plugin: './src/plugin',
47+
middleware: './src/middleware',
48+
router: './src/router',
49+
},
50+
server: {
51+
entry: 'app.js',
52+
options: {
53+
abc: 123,
54+
},
55+
cc: 1,
56+
},
57+
devServer: {
58+
port: 6666,
59+
},
60+
};
61+
```
62+
63+
### 入口文件 `server.entry`
64+
65+
分发调用指定的模块,其中 `router` 为必须项
66+
3567
```js
3668
'use strict';
3769

3870

3971
module.exports = function(app) {
4072

41-
// 增强 $config
42-
app.$dispatcher('config', require.resolve('@micro-app/test/config'));
43-
// 配置全局 helper
44-
app.$dispatcher('helper', require.resolve('@micro-app/test/helper'));
45-
// 配置全局 service
46-
app.$dispatcher('service', require.resolve('@micro-app/test/service'));
47-
// 配置全局 plugin
48-
app.$dispatcher('plugin', require.resolve('@micro-app/test/plugin'));
49-
// 配置全局 middleware
50-
app.$dispatcher('middleware', require.resolve('@micro-app/test/middleware'));
73+
// // 增强 $config
74+
// app.$dispatcher('config', require.resolve('@micro-app/test/config'));
75+
// // 配置全局 helper
76+
// app.$dispatcher('helper', require.resolve('@micro-app/test/helper'));
77+
// // 配置全局 service
78+
// app.$dispatcher('service', require.resolve('@micro-app/test/service'));
79+
// // 配置全局 plugin
80+
// app.$dispatcher('plugin', require.resolve('@micro-app/test/plugin'));
81+
// // 配置全局 middleware
82+
// app.$dispatcher('middleware', require.resolve('@micro-app/test/middleware'));
5183
// 配置路由 router
5284
app.$dispatcher('router', require.resolve('@micro-app/test/router'));
5385

5486
return app;
5587

5688
};
5789

90+
```
91+
92+
### 开启 swagger
93+
94+
配置 `.env` 文件,开启 Swagger
95+
96+
```conf
97+
DOCS_SWAGGER=true
98+
```
99+
100+
配置 swagger 文档,需要在接口方法中增加注释,如下:
101+
102+
```js
103+
// https://www.npmjs.com/package/swagger-jsdoc
104+
/**
105+
* @swagger
106+
* /api/docs/swagger.json:
107+
* get:
108+
* summary: 返回 swagger.json
109+
* description: 返回 json 格式的 swagger.json
110+
* responses:
111+
* 200:
112+
* description: 成功
113+
*/
114+
router.get('/swagger.json', swaggerRoutes.swaggerJson());
115+
116+
/**
117+
* @swagger
118+
* /api/docs/swagger:
119+
* get:
120+
* summary: swagger 页面
121+
* description: swagger 展示所有接口
122+
* responses:
123+
* 200:
124+
* description: 成功
125+
*/
126+
router.get('/swagger', swaggerRoutes.swagger());
127+
```
128+
129+
访问接口文档
130+
131+
```js
132+
/api/docs/swagger
133+
// or
134+
/api/docs/swagger.json
58135
```

demo/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,6 @@ service.registerPlugin({
99
});
1010

1111
(async () => {
12-
await service.run('serve');
12+
await service.run('start');
1313
// console.log(result);
1414
})();

package.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"name": "plugin-koa",
2+
"name": "@micro-app/plugin-koa",
33
"version": "0.0.1",
44
"description": "[Plugin] koa adapter plugin.",
55
"main": "src/index.js",
@@ -68,7 +68,9 @@
6868
"koa-logger": "^3.2.1",
6969
"koa-onerror": "^4.1.0",
7070
"koa-router": "^10.0.0",
71+
"koa2-swagger-ui": "^5.0.5",
7172
"moment": "^2.29.1",
72-
"portfinder": "^1.0.28"
73+
"portfinder": "^1.0.28",
74+
"swagger-jsdoc": "3"
7375
}
7476
}

src/plugins/docs/index.js

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -5,30 +5,32 @@ module.exports = function(app) {
55
const router = app.$newRouter();
66
const swaggerRoutes = require('./swagger.js')(app);
77

8-
// https://www.npmjs.com/package/swagger-jsdoc
9-
/**
10-
* @swagger
11-
* /api/v1/docs/swagger.json:
12-
* get:
13-
* summary: 返回 swagger.json
14-
* description: 返回 json 格式的 swagger.json
15-
* responses:
16-
* 200:
17-
* description: 成功
18-
*/
19-
router.get('/swagger.json', swaggerRoutes.swaggerJson());
8+
if (swaggerRoutes) {
9+
// https://www.npmjs.com/package/swagger-jsdoc
10+
/**
11+
* @swagger
12+
* /api/docs/swagger.json:
13+
* get:
14+
* summary: 返回 swagger.json
15+
* description: 返回 json 格式的 swagger.json
16+
* responses:
17+
* 200:
18+
* description: 成功
19+
*/
20+
router.get('/swagger.json', swaggerRoutes.swaggerJson());
2021

21-
/**
22-
* @swagger
23-
* /api/v1/docs/swagger:
24-
* get:
25-
* summary: swagger 页面
26-
* description: swagger 展示所有接口
27-
* responses:
28-
* 200:
29-
* description: 成功
30-
*/
31-
router.get('/swagger', swaggerRoutes.swagger());
22+
/**
23+
* @swagger
24+
* /api/docs/swagger:
25+
* get:
26+
* summary: swagger 页面
27+
* description: swagger 展示所有接口
28+
* responses:
29+
* 200:
30+
* description: 成功
31+
*/
32+
router.get('/swagger', swaggerRoutes.swagger());
33+
}
3234

3335
return router;
3436
};

src/plugins/docs/swagger.js

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
'use strict';
22

33
const swaggerJSDoc = require('swagger-jsdoc');
4-
const koaSwagger = require('koa2-swagger-ui');
5-
const { path } = require('@micro-app/shared-utils');
4+
const { koaSwagger } = require('koa2-swagger-ui');
5+
const { logger, path } = require('@micro-app/shared-utils');
66

77
function swaggerOptionsFactory(spec, config) {
88
if (!spec) {
99
const info = config.info || {};
10+
const root = info.root;
11+
if (!root) {
12+
logger.error('[swagger error]', 'root is null!!!');
13+
return;
14+
}
1015
return {
1116
swaggerDefinition: {
1217
info: {
@@ -19,7 +24,7 @@ function swaggerOptionsFactory(spec, config) {
1924
// basePath: '/', // Base path (optional)
2025
},
2126
// Path to the API docs
22-
apis: [ path.resolve(__dirname, '../**/*.js') ],
27+
apis: [ path.resolve(root, '**/*.js'), path.resolve(__dirname, '**/*.js') ],
2328
};
2429
}
2530
return {
@@ -30,10 +35,11 @@ function swaggerOptionsFactory(spec, config) {
3035
}
3136

3237
module.exports = function(app) {
33-
3438
const config = app.$config || {};
35-
const swaggerSpec = swaggerJSDoc(swaggerOptionsFactory(null, config));
39+
const swaggerOptions = swaggerOptionsFactory(null, config);
40+
if (!swaggerOptions) return;
3641

42+
const swaggerSpec = swaggerJSDoc(swaggerOptions);
3743
return {
3844
swaggerJson() {
3945
// Initialize swagger-jsdoc -> returns validated swagger spec in json format

src/plugins/factory/Lifecycle.js

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,32 +7,33 @@ module.exports = class Lifecycle {
77
this.app = app;
88
}
99

10-
config(root) {
11-
return this.__register__('config', root);
12-
}
10+
// config(root) {
11+
// return this.__register__('config', root);
12+
// }
1313

14-
service(root) {
15-
return this.__register__('service', root);
16-
}
14+
// service(root) {
15+
// return this.__register__('service', root);
16+
// }
1717

18-
helper(root) {
19-
return this.__register__('helper', root);
20-
}
18+
// helper(root) {
19+
// return this.__register__('helper', root);
20+
// }
2121

22-
middleware(root) {
23-
return this.__register__('middleware', root);
24-
}
22+
// middleware(root) {
23+
// return this.__register__('middleware', root);
24+
// }
2525

26-
plugin(root) {
27-
return this.__register__('plugin', root);
28-
}
26+
// plugin(root) {
27+
// return this.__register__('plugin', root);
28+
// }
2929

3030
router(root) {
3131
const app = this.app;
3232
const config = app.$config || {};
3333

3434
// docs
3535
if (process.env.DOCS_SWAGGER) {
36+
logger.info('[DOCS_SWAGGER]', 'swagger is opened!');
3637
app.useRoute('/api/docs', require('../docs')(app));
3738
}
3839
// 404 Not Found

src/plugins/factory/_customResult.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,4 +72,8 @@ module.exports = function(app) {
7272
);
7373
this.body = json;
7474
};
75+
76+
app.context.error = function(...args) {
77+
return this.result(STATUS_CODES.StatusBadRequest, ...args);
78+
};
7579
};

src/plugins/factory/index.js

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,21 @@
11
'use strict';
2-
2+
const { logger } = require('@micro-app/shared-utils');
33

44
module.exports = async function(api, info = {}) {
55
const Application = require('./Application.js');
66
const app = new Application(api, info);
7+
app.on('error', function(err, ctx) {
8+
// logger
9+
logger.error('[系统异常]', err);
10+
});
11+
12+
app.use(async (ctx, next) => {
13+
try {
14+
await next();
15+
} catch (error) {
16+
ctx.throw(error);
17+
}
18+
});
719

820
const { index, port, host } = info;
921
const runApp = require(index); // app.js

src/plugins/index.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
'use strict';
22

33
const plugins = [
4-
'init',
54
'serve',
65
'start',
76
];

0 commit comments

Comments
 (0)