diff --git a/doc/page/plugin/dev.md b/doc/page/plugin/dev.md
new file mode 100644
index 00000000..b7f6c7a5
--- /dev/null
+++ b/doc/page/plugin/dev.md
@@ -0,0 +1,63 @@
+## 运行开发服务器
+```
+npm install
+npm install -g ykit //依赖 ykit
+npm run dev
+```
+## 初始化目录
+
+可参考 项目vendors/exts 目录下的插件
+
+在 vendors/node_modules 下新建 yapi-plugin-demo 目录和 npm init,最后生成的目录接口如下
+```
+yapi-plugin-demo
+ client.js //客户端入口文件
+ server.js //服务端入口文件
+ packjson.json //插件依赖管理
+ index.js //插件配置文件
+```
+
+## index.js 配置说明
+```
+server: true // 如果为true,表名该插件需要经过后端服务器加载
+client: true // 如果为true,表名该插件需要经过前端编译
+```
+
+## server.js
+在server.js 需要导出一个 function ,例如: module.exports = function(options){}
+
+options 可在 config.json 配置
+### 绑定钩子
+```
+this.bindHook(hookname, listener) //绑定钩子
+hookname //钩子名
+listener //监听函数,可以是普通函数,也可以是 asyncFunction
+```
+
+### 如何使用 YApi vendors/server 目录下的模块
+可以直接 require vendors 目录下的模块,注意:后端 node 不能使用 import关键字,只能使用 require
+例如: require('yapi')
+
+### 加载插件
+在config.json plugins配置项,加入 demo,例如:
+```
+{
+ ...
+ plugins: {
+ name: 'demo'
+ }
+}
+```
+
+### controller 和 model
+新增 controller 需要继承 baseController(controller/base.js)
+
+新增 model 需要继承 baseModel(model/base.js)
+
+## client.js
+### 绑定钩子(同后端 server.js )
+```
+this.bindHook(hookname, listener) //绑定钩子
+hookname //钩子名
+listener //监听函数,可以是普通函数,也可以是 asyncFunction
+```
diff --git a/doc/page/plugin/hooks.md b/doc/page/plugin/hooks.md
new file mode 100644
index 00000000..0ece845b
--- /dev/null
+++ b/doc/page/plugin/hooks.md
@@ -0,0 +1,165 @@
+## 后端 hookList
+目前 hooksList 只有下面列出的部分,如果您有其他的需求,可提建议到 github 或者 qq群
+```
+/**
+ * 钩子配置
+ */
+var hooks = {
+ /**
+ * 第三方sso登录钩子,暂只支持设置一个
+ * @param ctx
+ */
+ 'third_login': {
+ type: 'single',
+ listener: null
+ },
+ /**
+ * 客户端增加接口成功后触发
+ * @param id 接口id
+ */
+ 'interface_add': {
+ type: 'multi',
+ listener: []
+ },
+ /**
+ * 客户端删除接口成功后触发
+ * @param id 接口id
+ */
+ 'interface_del': {
+ type: 'multi',
+ listener: []
+ },
+ /**
+ * 客户端更新接口成功后触发
+ * @param id 接口id
+ */
+ 'interface_update':{
+ type: 'multi',
+ listener: []
+ },
+ /**
+ * 客户端获取接口数据列表
+ * @param id project_id
+ */
+ 'interface_list':{
+ type: 'multi',
+ listener: []
+ },
+ /**
+ * 客户端获取一条接口信息触发
+ * @param id 接口id
+ */
+ 'interface_get':{
+ type: 'multi',
+ listener: []
+ },
+ /**
+ * 客户端增加一个新项目
+ * @param id 项目id
+ */
+ 'project_add':{
+ type: 'multi',
+ listener: []
+ },
+ /**
+ * 客户端删除删除一个项目
+ * @param id 项目id
+ */
+ 'project_del':{
+ type: 'multi',
+ listener: []
+ },
+ /**
+ * MockServer生成mock数据后触发
+ * @param context Object
+ * {
+ * projectData: project,
+ interfaceData: interfaceData,
+ ctx: ctx,
+ mockJson: res
+ * }
+ *
+ */
+ mock_after: {
+ type: 'multi',
+ listener: []
+ },
+ /**
+ * 增加路由的钩子
+ * type Sync
+ * @param addPluginRouter Function
+ * addPLuginPLugin(config)
+ * config = {
+ * path, // String
+ * method, // String
+ * controller // Class 继承baseController的class
+ * action // String controller的Action
+ * }
+ */
+ add_router: {
+ type: 'multi',
+ listener: []
+ }
+};
+```
+
+## 前端 hookList
+```
+/**
+ * type component 组件
+ * listener 监听函数
+ * mulit 是否绑定多个监听函数
+ *
+ */
+
+hooks = {
+ /**
+ * 第三方登录 //可参考 yapi-plugin-qsso 插件
+ */
+ third_login: {
+ type: 'component',
+ mulit: false,
+ listener: null
+ },
+ /**
+ * 导入数据
+ * @param importDataModule
+ *
+ * @info
+ * 可参考 vendors/exts/yapi-plugin-import-swagger插件
+ * importDataModule = {};
+ *
+ */
+ import_data: {
+ type: 'listener',
+ mulit: true,
+ listener: []
+ },
+ /**
+ * 接口页面 tab 钩子
+ * @param InterfaceTabs
+ *
+ * @info
+ * 可参考 vendors/exts/yapi-plugin-advanced-mock
+ * let InterfaceTabs = {
+ view: {
+ component: View,
+ name: '预览'
+ },
+ edit: {
+ component: Edit,
+ name: '编辑'
+ },
+ run: {
+ component: Run,
+ name: '运行'
+ }
+ }
+ */
+ interface_tab: {
+ type: 'listener',
+ mulit: true,
+ listener: []
+ }
+};
+```
\ No newline at end of file
diff --git a/doc/page/plugin/index.md b/doc/page/plugin/index.md
new file mode 100644
index 00000000..03194e6f
--- /dev/null
+++ b/doc/page/plugin/index.md
@@ -0,0 +1,13 @@
+## 安装
+假设插件名为:yapi-plugin-demo,安装方法如下:
+```
+cd {项目目录}
+yapi-cli plugin yapi-plugin-demo
+```
+
+## 卸载插件
+假设插件名为:yapi-plugin-demo,卸载方法如下:
+```
+cd {项目目录}
+yapi-cli unplugin yapi-plugin-demo
+```
\ No newline at end of file
diff --git a/doc/page/plugin/list.md b/doc/page/plugin/list.md
new file mode 100644
index 00000000..aa5c84f0
--- /dev/null
+++ b/doc/page/plugin/list.md
@@ -0,0 +1,18 @@
+## 插件列表
+
+
+
\ No newline at end of file
diff --git a/server/controllers/interface.js b/server/controllers/interface.js
index 0cdaa16f..d0245287 100644
--- a/server/controllers/interface.js
+++ b/server/controllers/interface.js
@@ -289,9 +289,11 @@ class interfaceController extends baseController {
desc: 'string',
catid: 'number'
});
-
- params.method = params.method || 'GET';
- params.method = params.method.toUpperCase();
+ if (!_.isUndefined(params.method)) {
+ params.method = params.method || 'GET';
+ params.method = params.method.toUpperCase();
+ }
+
let id = ctx.request.body.id;
diff --git a/static/doc/api.html b/static/doc/api.html
index fe823edd..63498816 100644
--- a/static/doc/api.html
+++ b/static/doc/api.html
@@ -38,6 +38,11 @@
内网部署
+
+
+ 插件Wiki
+
+
版本记录
diff --git a/static/doc/case.html b/static/doc/case.html
index 6fce506f..d8620b8b 100644
--- a/static/doc/case.html
+++ b/static/doc/case.html
@@ -38,6 +38,11 @@
内网部署
+
+
+ 插件Wiki
+
+
版本记录
diff --git a/static/doc/data.html b/static/doc/data.html
index 62444ba7..b4c0a17f 100644
--- a/static/doc/data.html
+++ b/static/doc/data.html
@@ -38,6 +38,11 @@
内网部署
+
+
+ 插件Wiki
+
+
版本记录
diff --git a/static/doc/devops.html b/static/doc/devops.html
index 255f551b..dc8e71b5 100644
--- a/static/doc/devops.html
+++ b/static/doc/devops.html
@@ -38,6 +38,11 @@
内网部署
+
+
+ 插件Wiki
+
+
版本记录
diff --git a/static/doc/getfamiliar.html b/static/doc/getfamiliar.html
index cbe1cbb6..e7d67e14 100644
--- a/static/doc/getfamiliar.html
+++ b/static/doc/getfamiliar.html
@@ -38,6 +38,11 @@
内网部署
+
+
+ 插件Wiki
+
+
版本记录
diff --git a/static/doc/index.html b/static/doc/index.html
index de4f8948..4676719c 100644
--- a/static/doc/index.html
+++ b/static/doc/index.html
@@ -38,6 +38,11 @@
内网部署
+
+
+ 插件Wiki
+
+
版本记录
diff --git a/static/doc/interface.html b/static/doc/interface.html
index 662e8500..4e9366d3 100644
--- a/static/doc/interface.html
+++ b/static/doc/interface.html
@@ -38,6 +38,11 @@
内网部署
+
+
+ 插件Wiki
+
+
版本记录
diff --git a/static/doc/manage.html b/static/doc/manage.html
index dcf9ac79..fd7edb4e 100644
--- a/static/doc/manage.html
+++ b/static/doc/manage.html
@@ -38,6 +38,11 @@
内网部署
+
+
+ 插件Wiki
+
+
版本记录
diff --git a/static/doc/mock.html b/static/doc/mock.html
index a0beb810..88deae0c 100644
--- a/static/doc/mock.html
+++ b/static/doc/mock.html
@@ -38,6 +38,11 @@
内网部署
+
+
+ 插件Wiki
+
+
版本记录
diff --git a/static/doc/plugin-dev.html b/static/doc/plugin-dev.html
new file mode 100644
index 00000000..a637c1c7
--- /dev/null
+++ b/static/doc/plugin-dev.html
@@ -0,0 +1,200 @@
+
+
+
+
+
+
+
+
+
+
+ YApi 插件Wiki
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
运行开发服务器 #
npm install
+npm install -g ykit //依赖 ykit
+npm run dev
+
初始化目录 #
可参考 项目vendors/exts 目录下的插件
+
在 vendors/node_modules 下新建 yapi-plugin-demo 目录和 npm init,最后生成的目录接口如下
+
yapi-plugin-demo
+ client.js //客户端入口文件
+ server.js //服务端入口文件
+ packjson.json //插件依赖管理
+ index.js //插件配置文件
+
index.js 配置说明 #
server: true // 如果为true,表名该插件需要经过后端服务器加载
+client: true // 如果为true,表名该插件需要经过前端编译
+
server.js #
在server.js 需要导出一个 function ,例如: module.exports = function(options){}
+
options 可在 config.json 配置
+
绑定钩子 #
this.bindHook(hookname, listener) //绑定钩子
+hookname //钩子名
+listener //监听函数,可以是普通函数,也可以是 asyncFunction
+
如何使用 YApi vendors/server 目录下的模块 #
可以直接 require vendors 目录下的模块,注意:后端 node 不能使用 import关键字,只能使用 require
+例如: require('yapi')
+
加载插件 #
在config.json plugins配置项,加入 demo,例如:
+
{
+ ...
+ plugins: {
+ name: 'demo'
+ }
+}
+
controller 和 model #
新增 controller 需要继承 baseController(controller/base.js)
+
新增 model 需要继承 baseModel(model/base.js)
+
client.js #
绑定钩子(同后端 server.js ) #
this.bindHook(hookname, listener) //绑定钩子
+hookname //钩子名
+listener //监听函数,可以是普通函数,也可以是 asyncFunction
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/static/doc/plugin-hooks.html b/static/doc/plugin-hooks.html
new file mode 100644
index 00000000..135ec82a
--- /dev/null
+++ b/static/doc/plugin-hooks.html
@@ -0,0 +1,315 @@
+
+
+
+
+
+
+
+
+
+
+ YApi 插件Wiki
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
后端 hookList #
目前 hooksList 只有下面列出的部分,如果您有其他的需求,可提建议到 github 或者 qq群
+
/**
+ * 钩子配置
+ */
+var hooks = {
+ /**
+ * 第三方sso登录钩子,暂只支持设置一个
+ * @param ctx
+ */
+ 'third_login': {
+ type: 'single',
+ listener: null
+ },
+ /**
+ * 客户端增加接口成功后触发
+ * @param id 接口id
+ */
+ 'interface_add': {
+ type: 'multi',
+ listener: []
+ },
+ /**
+ * 客户端删除接口成功后触发
+ * @param id 接口id
+ */
+ 'interface_del': {
+ type: 'multi',
+ listener: []
+ },
+ /**
+ * 客户端更新接口成功后触发
+ * @param id 接口id
+ */
+ 'interface_update':{
+ type: 'multi',
+ listener: []
+ },
+ /**
+ * 客户端获取接口数据列表
+ * @param id project_id
+ */
+ 'interface_list':{
+ type: 'multi',
+ listener: []
+ },
+ /**
+ * 客户端获取一条接口信息触发
+ * @param id 接口id
+ */
+ 'interface_get':{
+ type: 'multi',
+ listener: []
+ },
+ /**
+ * 客户端增加一个新项目
+ * @param id 项目id
+ */
+ 'project_add':{
+ type: 'multi',
+ listener: []
+ },
+ /**
+ * 客户端删除删除一个项目
+ * @param id 项目id
+ */
+ 'project_del':{
+ type: 'multi',
+ listener: []
+ },
+ /**
+ * MockServer生成mock数据后触发
+ * @param context Object
+ * {
+ * projectData: project,
+ interfaceData: interfaceData,
+ ctx: ctx,
+ mockJson: res
+ * }
+ *
+ */
+ mock_after: {
+ type: 'multi',
+ listener: []
+ },
+ /**
+ * 增加路由的钩子
+ * type Sync
+ * @param addPluginRouter Function
+ * addPLuginPLugin(config)
+ * config = {
+ * path, // String
+ * method, // String
+ * controller // Class 继承baseController的class
+ * action // String controller的Action
+ * }
+ */
+ add_router: {
+ type: 'multi',
+ listener: []
+ }
+};
+
前端 hookList #
/**
+ * type component 组件
+ * listener 监听函数
+ * mulit 是否绑定多个监听函数
+ *
+ */
+
+hooks = {
+ /**
+ * 第三方登录 //可参考 yapi-plugin-qsso 插件
+ */
+ third_login: {
+ type: 'component',
+ mulit: false,
+ listener: null
+ },
+ /**
+ * 导入数据
+ * @param importDataModule
+ *
+ * @info
+ * 可参考 vendors/exts/yapi-plugin-import-swagger插件
+ * importDataModule = {};
+ *
+ */
+ import_data: {
+ type: 'listener',
+ mulit: true,
+ listener: []
+ },
+ /**
+ * 接口页面 tab 钩子
+ * @param InterfaceTabs
+ *
+ * @info
+ * 可参考 vendors/exts/yapi-plugin-advanced-mock
+ * let InterfaceTabs = {
+ view: {
+ component: View,
+ name: '预览'
+ },
+ edit: {
+ component: Edit,
+ name: '编辑'
+ },
+ run: {
+ component: Run,
+ name: '运行'
+ }
+ }
+ */
+ interface_tab: {
+ type: 'listener',
+ mulit: true,
+ listener: []
+ }
+};
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/static/doc/plugin-index.html b/static/doc/plugin-index.html
new file mode 100644
index 00000000..e8b4835c
--- /dev/null
+++ b/static/doc/plugin-index.html
@@ -0,0 +1,163 @@
+
+
+
+
+
+
+
+
+
+
+ YApi 插件Wiki
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
安装 #
假设插件名为:yapi-plugin-demo,安装方法如下:
+
cd {项目目录}
+yapi-cli plugin yapi-plugin-demo
+
卸载插件 #
假设插件名为:yapi-plugin-demo,卸载方法如下:
+
cd {项目目录}
+yapi-cli unplugin yapi-plugin-demo
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/static/doc/plugin-list.html b/static/doc/plugin-list.html
new file mode 100644
index 00000000..49dd1269
--- /dev/null
+++ b/static/doc/plugin-list.html
@@ -0,0 +1,169 @@
+
+
+
+
+
+
+
+
+
+
+ YApi 插件Wiki
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/static/doc/plugin.html b/static/doc/plugin.html
new file mode 100644
index 00000000..1b13941a
--- /dev/null
+++ b/static/doc/plugin.html
@@ -0,0 +1,151 @@
+
+
+
+
+
+
+
+
+
+
+ YApi 插件Wiki
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
安装 #
假设插件名为:yapi-plugin-demo,安装方法如下:
+
cd {项目目录}
+yapi-cli plugin yapi-plugin-demo
+
卸载插件 #
假设插件名为:yapi-plugin-demo,卸载方法如下:
+
cd {项目目录}
+yapi-cli unplugin yapi-plugin-demo
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/static/doc/project.html b/static/doc/project.html
index 55ed11a5..772b1e40 100644
--- a/static/doc/project.html
+++ b/static/doc/project.html
@@ -38,6 +38,11 @@
内网部署
+
+
+ 插件Wiki
+
+
版本记录
diff --git a/static/doc/qa.html b/static/doc/qa.html
index d7d08ff8..84f48c50 100644
--- a/static/doc/qa.html
+++ b/static/doc/qa.html
@@ -38,6 +38,11 @@
内网部署
+
+
+ 插件Wiki
+
+
版本记录
diff --git a/static/doc/quickstart.html b/static/doc/quickstart.html
index 77c65670..c7630bf1 100644
--- a/static/doc/quickstart.html
+++ b/static/doc/quickstart.html
@@ -38,6 +38,11 @@
内网部署
+
+
+ 插件Wiki
+
+
版本记录
diff --git a/static/doc/releases.html b/static/doc/releases.html
index 0fce7819..4165c728 100644
--- a/static/doc/releases.html
+++ b/static/doc/releases.html
@@ -38,6 +38,11 @@
内网部署
+
+
+ 插件Wiki
+
+
版本记录
diff --git a/ydoc.json b/ydoc.json
index 1f4aa2a6..01bd7983 100644
--- a/ydoc.json
+++ b/ydoc.json
@@ -104,6 +104,37 @@
"compile": "markdown",
"menuLevel": 2,
"content": "./doc/page/manage/build.md"
+ },
+ {
+ "name": "plugin",
+ "title": "插件Wiki",
+ "banner": {
+ "title": "插件",
+ "description": "可根据业务需求,定制化功能"
+ },
+ "content": {
+ "sidebar": true,
+ "multi": true,
+ "index": "./doc/page/plugin/index.md",
+ "pages": [{
+ "name": "插件管理",
+ "index": "plugin-index",
+ "content": "./doc/page/plugin/index.md"
+ },{
+ "name": "插件开发",
+ "index": "plugin-dev",
+ "content": "./doc/page/plugin/dev.md"
+ },{
+ "name": "钩子列表",
+ "index": "plugin-hooks",
+ "content": "./doc/page/plugin/hooks.md"
+ },{
+ "name": "插件列表",
+ "index": "plugin-list",
+ "content": "./doc/page/plugin/list.md"
+ }
+ ]
+ }
},
{
"name": "releases",