opti: yapi-cli to yapi

This commit is contained in:
suxiaoxin 2017-10-16 20:33:23 +08:00
parent cd748b6f42
commit 298454e090
25 changed files with 34 additions and 235 deletions

View File

@ -19,17 +19,17 @@ YApi 是<strong>高效</strong>、<strong>易用</strong>、<strong>功能强大
* nodejs7.6+)
* mongodb2.6+
#### 安装
使用我们提供的 yapi-cli 工具,部署 YApi 平台是非常容易的。执行 yapi-cli server 启动可视化部署程序,输入相应的配置和点击开始部署,就能完成整个网站的部署。部署完成之后,可按照提示信息,执行 node/{网站路径/server/app.js} 启动服务器。在浏览器打开指定url, 点击登录输入您刚才设置的管理员邮箱,默认密码为 ymfe.org 登录系统(默认密码可在个人中心修改)。
使用我们提供的 yapi-cli 工具,部署 YApi 平台是非常容易的。执行 yapi server 启动可视化部署程序,输入相应的配置和点击开始部署,就能完成整个网站的部署。部署完成之后,可按照提示信息,执行 node/{网站路径/server/app.js} 启动服务器。在浏览器打开指定url, 点击登录输入您刚才设置的管理员邮箱,默认密码为 ymfe.org 登录系统(默认密码可在个人中心修改)。
npm install -g yapi-cli --registry https://registry.npm.taobao.org
yapi-cli server
yapi server
#### 升级
升级项目版本是非常容易的,并且不会影响已有的项目数据,只会同步 vendors 目录下的源码文件。
cd {项目目录}
yapi-cli ls //查看版本号列表
yapi-cli update //更新到最新版本
yapi-cli update -v {Version} //更新到指定版本
yapi ls //查看版本号列表
yapi update //更新到最新版本
yapi update -v {Version} //更新到指定版本
### 在线 Demo

View File

@ -1 +1 @@
module.exports = {"qsso" : {module: require('plugins/yapi-plugin-qsso/client.js'),options: null},"import-postman" : {module: require('exts/yapi-plugin-import-postman/client.js'),options: null},"import-har" : {module: require('exts/yapi-plugin-import-har/client.js'),options: null},"advanced-mock" : {module: require('exts/yapi-plugin-advanced-mock/client.js'),options: null},"import-swagger" : {module: require('exts/yapi-plugin-import-swagger/client.js'),options: null}}
module.exports = {"qsso" : {module: require('plugins/yapi-plugin-qsso/client.js'),options: null},"qsso" : {module: require('plugins/yapi-plugin-qsso/client.js'),options: null},"import-postman" : {module: require('exts/yapi-plugin-import-postman/client.js'),options: null},"import-har" : {module: require('exts/yapi-plugin-import-har/client.js'),options: null},"advanced-mock" : {module: require('exts/yapi-plugin-advanced-mock/client.js'),options: null},"import-swagger" : {module: require('exts/yapi-plugin-import-swagger/client.js'),options: null}}

View File

@ -14,19 +14,19 @@ proxy_set_header Connection "upgrade";
* mongodb2.6+
## 安装
执行 yapi-cli server 启动可视化部署程序,输入相应的配置和点击开始部署,就能完成整个网站的部署。部署完成之后,可按照提示信息,执行 node/{网站路径/server/app.js} 启动服务器。在浏览器打开指定url, 点击登录输入您刚才设置的管理员邮箱,默认密码(ymfe.org) 登录系统(默认密码可在个人中心修改)。
执行 yapi server 启动可视化部署程序,输入相应的配置和点击开始部署,就能完成整个网站的部署。部署完成之后,可按照提示信息,执行 node/{网站路径/server/app.js} 启动服务器。在浏览器打开指定url, 点击登录输入您刚才设置的管理员邮箱,默认密码(ymfe.org) 登录系统(默认密码可在个人中心修改)。
```
npm install -g yapi-cli --registry https://registry.npm.taobao.org
yapi-cli server
yapi server
```
## 升级
升级项目版本是非常容易的,并且不会影响已有的项目数据,只会同步 vendors 目录下的源码文件。
cd {项目目录}
yapi-cli ls //查看版本号列表
yapi-cli update //升级到最新版本
yapi-cli update -v v1.1.0 //升级到指定版本
yapi ls //查看版本号列表
yapi update //升级到最新版本
yapi update -v v1.1.0 //升级到指定版本
## 配置邮箱 (仅支持 SMTP)
打开项目目录 config.json 文件,新增 mail 配置, 替换默认的邮箱配置

View File

@ -2,12 +2,12 @@
假设插件名为yapi-plugin-demo,安装方法如下:
```
cd {项目目录}
yapi-cli plugin yapi-plugin-demo
yapi plugin yapi-plugin-demo
```
## 卸载插件
假设插件名为yapi-plugin-demo,卸载方法如下:
```
cd {项目目录}
yapi-cli unplugin yapi-plugin-demo
yapi unplugin yapi-plugin-demo
```

View File

@ -20,9 +20,9 @@
"axios": "^0.16.2",
"chalk": "^2.0.1",
"clipboard": "^1.7.1",
"deref": "^0.7.0",
"fs-extra": "^3.0.1",
"happypack": "^4.0.0-beta.5",
"json-schema-faker": "^0.5.0-rc11",
"json-schema-ref-parser": "^4.0.0",
"json5": "^0.5.1",
"jsonwebtoken": "^7.4.1",
"koa": "^2.0.0",
@ -41,13 +41,16 @@
"mongoose-auto-increment": "^5.0.1",
"nodemailer": "^4.0.1",
"ora": "^1.3.0",
"randexp": "^0.4.6",
"request": "^2.81.0",
"sha1": "^1.1.1",
"tslib": "^1.8.0",
"underscore": "^1.8.3",
"universal-cookie": "^2.0.8",
"url": "^0.11.0"
},
"devDependencies": {
"happypack": "^4.0.0-beta.5",
"prop-types": "^15.5.10",
"rc-queue-anim": "^1.2.0",
"rc-scroll-anim": "^1.0.7",

View File

@ -725,72 +725,6 @@ class projectController extends baseController {
return ctx.body = yapi.commons.resReturn(queryList, 0, 'ok');
}
/**
* 下载项目的 Mock 数据
* @interface /project/download
* @method GET
* @category project
* @foldnumber 10
* @author wenbo.dong
* @param {String} project_id
*/
async download(ctx) {
const project_id = ctx.request.query.project_id;
let interfaceInst = yapi.getInst(interfaceModel);
// 根据 project_id 获取接口数据
let count = await interfaceInst.list(project_id);
if (!project_id) {
return ctx.body = yapi.commons.resReturn(null, 405, '项目id不能为空');
} else if (!count) {
return ctx.body = yapi.commons.resReturn(null, 401, '项目id不存在');
}
const arr = JSON.stringify(count.map(function (item) {
// 返回的json模板数据: item.res_body
const mockData = Mock.mock(
yapi.commons.json_parse(item.res_body)
);
return {
path: item.path,
mock: mockData
}
}));
const fileName = 'mock.js';
ctx.attachment(fileName);
await send(ctx, fileName, { root: __dirname + '/public' });
const res = `
var Mock = require('mockjs');
var xhook = require('xhook');
var data = ${arr};
function run() {
xhook.before(function(request, callback) {
setTimeout(function() {
var res;
data.forEach((item) => {
// 请求的接口在 data 中存在
if(request.url === item.path) {
res = {
status: 200,
text: Mock.mock(item.mock)
}
}
});
if (res) {
callback(res);
}else {
callback({ status: 405, text: '接口不存在' });
}
}, 500);
});
}
module.exports = run;`
.trim();
return ctx.body = res;
}
}
module.exports = projectController;

View File

@ -249,10 +249,6 @@
<li >
<a href="#-project-search">/project/search</a>
</li>
<li >
<a href="#-project-download">/project/download</a>
</li>
</ul>
@ -3219,68 +3215,6 @@
<span class="token punctuation">}</span></code></pre>
</div>
<div class="con-list-item">
<blockquote class="api">
<h3 id="-project-download" class="page-header subject">
/project/download
<span class="ui-badge">GET</span>
<a class="hashlink" href="#-project-download">#</a>
</h3>
</blockquote>
<p>
<small class="text-muted">描述:</small>
下载项目的 Mock 数据
</p>
<p>
<small class="text-muted">源码位置:</small>
<a href="./static/server/controllers/project.js.html#728" target="_blank">./server/controllers/project.js:728</a>
</p>
<p>
<small class="text-muted">参数:</small>
</p>
<div class="docs-table">
<table class="yo-table yo-table-border">
<colgroup>
<col class="c1">
<col class="c2">
<col class="c3">
<col class="c4">
</colgroup>
<thead>
<tr class="active">
<th>参数名</th>
<th>类型</th>
<th>描述</th>
<th>必选</th>
<th>支持版本</th>
</tr>
</thead>
<tr>
<td>project_id</td>
<td>String</td>
<td></td>
<td>
<i class="yo-ico glyphicon glyphicon-ok text-success"></i>
</td>
<td></td>
</tr>
</table>
</div>
</div>

View File

@ -115,14 +115,14 @@ proxy_set_header Upgrade $http_upgrade<span class="token punctuation">;</span>
proxy_set_header Connection <span class="token string">"upgrade"</span><span class="token punctuation">;</span>
</code></pre><h2 class="subject" id="环境要求">环境要求 <a class="hashlink" href="#环境要求">#</a></h2><ul>
<li>nodejs7.6+)</li><li>mongodb2.6+</li></ul>
<h2 class="subject" id="安装">安装 <a class="hashlink" href="#安装">#</a></h2><p>执行 yapi-cli server 启动可视化部署程序,输入相应的配置和点击开始部署,就能完成整个网站的部署。部署完成之后,可按照提示信息,执行 node/{网站路径/server/app.js} 启动服务器。在浏览器打开指定url, 点击登录输入您刚才设置的管理员邮箱,默认密码(ymfe.org) 登录系统(默认密码可在个人中心修改)。</p>
<h2 class="subject" id="安装">安装 <a class="hashlink" href="#安装">#</a></h2><p>执行 yapi server 启动可视化部署程序,输入相应的配置和点击开始部署,就能完成整个网站的部署。部署完成之后,可按照提示信息,执行 node/{网站路径/server/app.js} 启动服务器。在浏览器打开指定url, 点击登录输入您刚才设置的管理员邮箱,默认密码(ymfe.org) 登录系统(默认密码可在个人中心修改)。</p>
<pre><code>npm install -g yapi-cli --registry https<span class="token operator">:</span>//registry.npm.taobao.org
yapi-cli server
yapi server
</code></pre><h2 class="subject" id="升级">升级 <a class="hashlink" href="#升级">#</a></h2><p>升级项目版本是非常容易的,并且不会影响已有的项目数据,只会同步 vendors 目录下的源码文件。</p>
<pre><code>cd <span class="token punctuation">{</span>项目目录<span class="token punctuation">}</span>
yapi-cli ls //查看版本号列表
yapi-cli update //升级到最新版本
yapi-cli update -v v1<span class="token number">.1</span>.<span class="token number">0</span> //升级到指定版本
yapi ls //查看版本号列表
yapi update //升级到最新版本
yapi update -v v1<span class="token number">.1</span>.<span class="token number">0</span> //升级到指定版本
</code></pre><h2 class="subject" id="配置邮箱__仅支持_SMTP_">配置邮箱 (仅支持 SMTP) <a class="hashlink" href="#配置邮箱__仅支持_SMTP_">#</a></h2><p>打开项目目录 config.json 文件,新增 mail 配置, 替换默认的邮箱配置</p>
<pre><code><span class="token punctuation">{</span>
<span class="token property">"port"</span><span class="token operator">:</span> <span class="token string">"*****"</span><span class="token punctuation">,</span>

View File

@ -130,10 +130,10 @@
<h2 class="subject" id="安装">安装 <a class="hashlink" href="#安装">#</a></h2><p>假设插件名为yapi-plugin-demo,安装方法如下:</p>
<pre><code>cd <span class="token punctuation">{</span>项目目录<span class="token punctuation">}</span>
yapi-cli plugin yapi-plugin-demo
yapi plugin yapi-plugin-demo
</code></pre><h2 class="subject" id="卸载插件">卸载插件 <a class="hashlink" href="#卸载插件">#</a></h2><p>假设插件名为yapi-plugin-demo,卸载方法如下:</p>
<pre><code>cd <span class="token punctuation">{</span>项目目录<span class="token punctuation">}</span>
yapi-cli unplugin yapi-plugin-demo
yapi unplugin yapi-plugin-demo
</code></pre>
</div>
</div>

View File

@ -118,10 +118,10 @@
<h2 class="subject" id="安装">安装 <a class="hashlink" href="#安装">#</a></h2><p>假设插件名为yapi-plugin-demo,安装方法如下:</p>
<pre><code>cd <span class="token punctuation">{</span>项目目录<span class="token punctuation">}</span>
yapi-cli plugin yapi-plugin-demo
yapi plugin yapi-plugin-demo
</code></pre><h2 class="subject" id="卸载插件">卸载插件 <a class="hashlink" href="#卸载插件">#</a></h2><p>假设插件名为yapi-plugin-demo,卸载方法如下:</p>
<pre><code>cd <span class="token punctuation">{</span>项目目录<span class="token punctuation">}</span>
yapi-cli unplugin yapi-plugin-demo
yapi unplugin yapi-plugin-demo
</code></pre>
</div>
</div>

View File

@ -132,7 +132,7 @@ class groupController extends baseController {
result = yapi.commons.fieldSelect(result, ['_id', 'group_name', 'group_desc', 'uid', 'members','type']);
let username = this.getUsername();
yapi.commons.saveLog({
content: `<a href="/user/profile/${this.getUid()}">${username}</a> 新增了分组 "${params.group_name}"`,
content: `<a href="/user/profile/${this.getUid()}">${username}</a> 新增了分组 <a href="/group/${result._id}">${params.group_name}</a>`,
type: 'group',
uid: this.getUid(),
username: username,

View File

@ -512,7 +512,7 @@ class interfaceController extends baseController {
if (data.catid) {
this.catModel.get(+data.catid).then((cate) => {
yapi.commons.saveLog({
content: `<a href="/user/profile/${this.getUid()}">${username}</a> 更新了分类 <a href="/project/${cate.project_id}/interface/api/cat_${data.catid}">${cate.name}</a> 下的接口 <a href="project/${cate.project_id}/interface/api/${id}">${interfaceData.title}</a>`,
content: `<a href="/user/profile/${this.getUid()}">${username}</a> 更新了分类 <a href="/project/${cate.project_id}/interface/api/cat_${data.catid}">${cate.name}</a> 下的接口 <a href="/project/${cate.project_id}/interface/api/${id}">${interfaceData.title}</a>`,
type: 'project',
uid: this.getUid(),
username: username,
@ -524,7 +524,7 @@ class interfaceController extends baseController {
let cateid = interfaceData.catid;
this.catModel.get(cateid).then((cate) => {
yapi.commons.saveLog({
content: `<a href="/user/profile/${this.getUid()}">${username}</a> 更新了分类 <a href="/project/${cate.project_id}/interface/api/cat_${cateid}">${cate.name}</a> 下的接口 <a href="project/${cate.project_id}/interface/api/${id}>${interfaceData.title}</a>`,
content: `<a href="/user/profile/${this.getUid()}">${username}</a> 更新了分类 <a href="/project/${cate.project_id}/interface/api/cat_${cateid}">${cate.name}</a> 下的接口 <a href="/project/${cate.project_id}/interface/api/${id}>${interfaceData.title}</a>`,
type: 'project',
uid: this.getUid(),
username: username,
@ -728,7 +728,7 @@ class interfaceController extends baseController {
let username = this.getUsername();
yapi.commons.saveLog({
content: `<a href="/user/profile/${this.getUid()}">${username}</a> 删除了分类 <a href="/project/${catData.project_id}/interface/api/cat_${id}">${catData.name}</a> 及该分类下的接口`,
content: `<a href="/user/profile/${this.getUid()}">${username}</a> 删除了分类 "${catData.name}" 及该分类下的接口`,
type: 'project',
uid: this.getUid(),
username: username,

View File

@ -554,7 +554,7 @@ class interfaceColController extends baseController{
await this.caseModel.delByCol(id);
let username = this.getUsername();
yapi.commons.saveLog({
content: `<a href="/user/profile/${this.getUid()}">${username}</a> 删除了接口集 <a href="/project/${colData.project_id}/interface/col/${id}">${colData.name}</a> 及其下面的接口`,
content: `<a href="/user/profile/${this.getUid()}">${username}</a> 删除了接口集 ${colData.name} 及其下面的接口`,
type: 'project',
uid: this.getUid(),
username: username,
@ -591,7 +591,7 @@ class interfaceColController extends baseController{
let username = this.getUsername();
this.colModel.get(caseData.col_id).then((col)=>{
yapi.commons.saveLog({
content: `<a href="/user/profile/${this.getUid()}">${username}</a> 删除了接口集 <a href="/project/${caseData.project_id}/interface/col/${caseData.col_id}">${col.name}</a> 下的接口 <a href="/project/${caseData.project_id}/interface/case/${caseid}">${caseData.casename}</a>`,
content: `<a href="/user/profile/${this.getUid()}">${username}</a> 删除了接口集 <a href="/project/${caseData.project_id}/interface/col/${caseData.col_id}">${col.name}</a> 下的接口 ${caseData.casename}`,
type: 'project',
uid: this.getUid(),
username: username,

View File

@ -75,7 +75,7 @@ class logController extends baseController {
projectLogList.forEach((item, index)=>{
item = item.toObject();
if(item.type === 'project'){
item.content = `在 <a href="/group/${item.typeid}">${projectDatas[item.typeid].name}</a> 项目: ` + item.content;
item.content = `在 <a href="/project/${item.typeid}">${projectDatas[item.typeid].name}</a> 项目: ` + item.content;
}
projectLogList[index] = item;
})

View File

@ -752,72 +752,6 @@ class projectController extends baseController {
return ctx.body = yapi.commons.resReturn(queryList, 0, 'ok');
}
/**
* 下载项目的 Mock 数据
* @interface /project/download
* @method GET
* @category project
* @foldnumber 10
* @author wenbo.dong
* @param {String} project_id
*/
async download(ctx) {
const project_id = ctx.request.query.project_id;
let interfaceInst = yapi.getInst(interfaceModel);
// 根据 project_id 获取接口数据
let count = await interfaceInst.list(project_id);
if (!project_id) {
return ctx.body = yapi.commons.resReturn(null, 405, '项目id不能为空');
} else if (!count) {
return ctx.body = yapi.commons.resReturn(null, 401, '项目id不存在');
}
const arr = JSON.stringify(count.map(function (item) {
// 返回的json模板数据: item.res_body
const mockData = Mock.mock(
yapi.commons.json_parse(item.res_body)
);
return {
path: item.path,
mock: mockData
}
}));
const fileName = 'mock.js';
ctx.attachment(fileName);
await send(ctx, fileName, { root: __dirname + '/public' });
const res = `
var Mock = require('mockjs');
var xhook = require('xhook');
var data = ${arr};
function run() {
xhook.before(function(request, callback) {
setTimeout(function() {
var res;
data.forEach((item) => {
// 请求的接口在 data 中存在
if(request.url === item.path) {
res = {
status: 200,
text: Mock.mock(item.mock)
}
}
});
if (res) {
callback(res);
}else {
callback({ status: 405, text: '接口不存在' });
}
}, 500);
});
}
module.exports = run;`
.trim();
return ctx.body = res;
}
}
module.exports = projectController;

View File

@ -1 +0,0 @@
window.WEBPACK_ASSETS = {"index.js":{"js":"index@717f13477574c1d89f76.js","css":"index@717f13477574c1d89f76.css"},"lib":{"js":"lib@dd4c0752e32a8c051c7c.js"},"lib2":{"js":"lib2@fda61e2b7f61e65a452d.js"},"manifest":{"js":"manifest@b67af9f8b578904e66c5.js"}}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
!function(e){function t(n){if(r[n])return r[n].exports;var i=r[n]={exports:{},id:n,loaded:!1};return e[n].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n=window.webpackJsonp;window.webpackJsonp=function(s,o){for(var u,f,l=0,c=[];l<s.length;l++)f=s[l],i[f]&&c.push.apply(c,i[f]),i[f]=0;for(u in o)e[u]=o[u];for(n&&n(s,o);c.length;)c.shift().call(null,t);if(o[0])return r[0]=0,t(0)};var r={},i={3:0};t.e=function(e,n){if(0===i[e])return n.call(null,t);if(void 0!==i[e])i[e].push(n);else{i[e]=[n];var r=document.getElementsByTagName("head")[0],s=document.createElement("script");s.type="text/javascript",s.charset="utf-8",s.async=!0,s.src=t.p+""+e+".chunk.min.js",r.appendChild(s)}},t.m=e,t.c=r,t.p=""}([])