mirror of
https://github.com/YMFE/yapi.git
synced 2025-02-17 13:49:43 +08:00
Merge branch 'dev' of gitlab.corp.qunar.com:mfe/yapi into dev
This commit is contained in:
commit
cdb5c57365
@ -1,11 +1,9 @@
|
||||
import React, { Component } from 'react';
|
||||
import './Follows.scss';
|
||||
import Subnav from '../../components/Subnav/Subnav.js';
|
||||
console.log('js in');
|
||||
|
||||
class Follows extends Component {
|
||||
render () {
|
||||
console.log('render');
|
||||
return (
|
||||
<div>
|
||||
<Subnav
|
||||
|
@ -6,6 +6,7 @@ import PropTypes from 'prop-types'
|
||||
import Breadcrumb from '../../components/Breadcrumb/Breadcrumb'
|
||||
import { Button } from 'antd'
|
||||
import { getMockUrl } from '../../reducer/modules/news.js'
|
||||
import Subnav from '../../components/Subnav/Subnav.js';
|
||||
|
||||
@connect(
|
||||
state => {
|
||||
@ -33,11 +34,8 @@ class News extends Component {
|
||||
componentWillMount(){
|
||||
const that = this;
|
||||
this.props.getMockUrl(2724).then(function(data){
|
||||
|
||||
const { prd_host, basepath, protocol } = data.payload.data.data;
|
||||
|
||||
const mockURL = `${protocol}://${prd_host}${basepath}/{path}`;
|
||||
console.log(data.payload.data.data);
|
||||
that.setState({
|
||||
mockURL: mockURL
|
||||
})
|
||||
@ -45,17 +43,33 @@ class News extends Component {
|
||||
}
|
||||
render () {
|
||||
return (
|
||||
<section className="news-box">
|
||||
<div className="logHead">
|
||||
<Breadcrumb />
|
||||
<div className="Mockurl">
|
||||
<span>Mock地址:</span>
|
||||
<p>{this.state.mockURL}</p>
|
||||
<Button type="primary">下载Mock数据</Button>
|
||||
</div>
|
||||
<div>
|
||||
<Subnav
|
||||
default={'动态'}
|
||||
data={[{
|
||||
name: '动态',
|
||||
path: '/news'
|
||||
}, {
|
||||
name: '测试',
|
||||
path: '/follow'
|
||||
}, {
|
||||
name: '设置',
|
||||
path: '/follow'
|
||||
}]}/>
|
||||
<div className="g-row">
|
||||
<section className="news-box">
|
||||
<div className="logHead">
|
||||
<Breadcrumb />
|
||||
<div className="Mockurl">
|
||||
<span>Mock地址:</span>
|
||||
<p>{this.state.mockURL}</p>
|
||||
<Button type="primary">下载Mock数据</Button>
|
||||
</div>
|
||||
</div>
|
||||
<NewsTimeline/>
|
||||
</section>
|
||||
</div>
|
||||
<NewsTimeline/>
|
||||
</section>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -5,7 +5,7 @@
|
||||
|
||||
display: -webkit-box;
|
||||
-webkit-box-flex: 1;
|
||||
margin: .88rem auto 0 auto;
|
||||
margin: 0px auto 0 auto;
|
||||
font-size: 0.14rem;
|
||||
background: #FFF;
|
||||
display: block;
|
||||
|
@ -187,13 +187,14 @@ class UpDateModal extends Component {
|
||||
rules: [{
|
||||
required: false,
|
||||
whitespace: true,
|
||||
message: "请输入环境名称",
|
||||
validator(rule, value, callback) {
|
||||
if (value) {
|
||||
if (value.length === 0) {
|
||||
callback('请输入环境域名');
|
||||
} else if (!/\S/.test(value)) {
|
||||
callback('请输入环境域名');
|
||||
} else if (/prd/.test(value)) {
|
||||
callback('环境域名不能是"prd"');
|
||||
} else {
|
||||
return callback();
|
||||
}
|
||||
@ -319,7 +320,7 @@ class UpDateModal extends Component {
|
||||
label={(
|
||||
<span>
|
||||
基本路径
|
||||
<Tooltip title="基本路径为空是根路径">
|
||||
<Tooltip title="基本路径为空表示根路径">
|
||||
<Icon type="question-circle-o" />
|
||||
</Tooltip>
|
||||
</span>
|
||||
|
56
client/containers/User/Avatar.js
Normal file
56
client/containers/User/Avatar.js
Normal file
@ -0,0 +1,56 @@
|
||||
import './index.scss'
|
||||
import React, { Component } from 'react'
|
||||
// import PropTypes from 'prop-types'
|
||||
import { Upload, Icon, message } from 'antd'
|
||||
class Avatar extends Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.state = {
|
||||
imageUrl:""
|
||||
}
|
||||
}
|
||||
handleChange(info){
|
||||
if (info.file.status === 'done') {
|
||||
// Get this url from response in real world.
|
||||
getBase64(info.file.originFileObj, imageUrl => this.setState({ imageUrl }));
|
||||
}
|
||||
}
|
||||
render() {
|
||||
const imageUrl = this.state.imageUrl;
|
||||
return <div className="avatar-box">
|
||||
<Upload
|
||||
className="avatar-uploader"
|
||||
name="avatar"
|
||||
showUploadList={true}
|
||||
action="//jsonplaceholder.typicode.com/posts/"
|
||||
beforeUpload={beforeUpload}
|
||||
onChange={this.handleChange.bind(this)} >
|
||||
{
|
||||
imageUrl ?
|
||||
<img src={imageUrl} alt="" className="avatar" /> :
|
||||
<Icon type="plus" className="avatar-uploader-trigger" />
|
||||
}
|
||||
</Upload>
|
||||
</div>
|
||||
}
|
||||
}
|
||||
|
||||
function beforeUpload(file) {
|
||||
const isJPG = file.type === 'image/jpeg';
|
||||
if (!isJPG) {
|
||||
message.error('You can only upload JPG file!');
|
||||
}
|
||||
const isLt2M = file.size / 1024 / 1024 < 2;
|
||||
if (!isLt2M) {
|
||||
message.error('Image must smaller than 2MB!');
|
||||
}
|
||||
return isJPG && isLt2M;
|
||||
}
|
||||
|
||||
function getBase64(img, callback) {
|
||||
const reader = new FileReader();
|
||||
reader.addEventListener('load', () => callback(reader.result));
|
||||
reader.readAsDataURL(img);
|
||||
}
|
||||
|
||||
export default Avatar;
|
@ -4,6 +4,7 @@ import { Row, Col, Menu, AutoComplete, Input, Icon } from 'antd'
|
||||
import axios from 'axios'
|
||||
import { connect } from 'react-redux'
|
||||
import PropTypes from 'prop-types'
|
||||
import Avatar from './Avatar.js'
|
||||
|
||||
const Option = AutoComplete.Option;
|
||||
@connect(
|
||||
@ -87,6 +88,7 @@ class LeftMenu extends Component {
|
||||
const { dataSource } = this.state;
|
||||
return (<div className="user-list">
|
||||
<div className='cur-user'>
|
||||
<Avatar />
|
||||
<div className='user-name'><span>用户名 :</span>{`${this.props.curUserName}`}</div>
|
||||
</div>
|
||||
<Row type="flex" justify="start" className="search">
|
||||
|
@ -11,6 +11,7 @@
|
||||
display: -webkit-box;
|
||||
-webkit-box-flex: 1;
|
||||
margin: 0 auto;
|
||||
margin-top: 24px;
|
||||
.user-list {
|
||||
box-shadow: 0 2px 4px 0 rgba(0,0,0,0.20);
|
||||
background: #FFF;
|
||||
@ -108,4 +109,28 @@
|
||||
border-bottom-left-radius: .04rem;
|
||||
border-bottom-right-radius: .04rem;
|
||||
}
|
||||
.avatar-uploader,
|
||||
.avatar-uploader-trigger,
|
||||
.avatar {
|
||||
width: 150px;
|
||||
height: 150px;
|
||||
}
|
||||
.avatar-uploader {
|
||||
display: block;
|
||||
border: 1px dashed #d9d9d9;
|
||||
border-radius: 6px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.avatar-uploader {
|
||||
display: block;
|
||||
border: 1px dashed #d9d9d9;
|
||||
border-radius: 6px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.avatar-uploader-trigger {
|
||||
display: table-cell;
|
||||
vertical-align: middle;
|
||||
font-size: 28px;
|
||||
color: #999;
|
||||
}
|
||||
}
|
||||
|
122
server/controllers/follow.js
Normal file
122
server/controllers/follow.js
Normal file
@ -0,0 +1,122 @@
|
||||
import yapi from '../yapi.js';
|
||||
import baseController from './base.js';
|
||||
import followModel from '../models/follow';
|
||||
|
||||
class followController extends baseController {
|
||||
constructor(ctx) {
|
||||
super(ctx);
|
||||
this.Model = yapi.getInst(followModel);
|
||||
// try{
|
||||
// var res = this.Model.save({
|
||||
// uid: 107,
|
||||
// projectid: 221,
|
||||
// projectname: 'Flight',
|
||||
// icon: 'code'
|
||||
// });
|
||||
// // var res = this.Model.del(107);
|
||||
// ctx.body = yapi.commons.resReturn(null, 200,res);
|
||||
// }catch(err){
|
||||
// ctx.body = yapi.commons.resReturn(null, 402, err.message);
|
||||
// }
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取节点列表
|
||||
* @interface /node/list
|
||||
* @method GET
|
||||
* @category node
|
||||
* @foldnumber 10
|
||||
* @param {Number} uid 用户id, 不能为空
|
||||
* @param {Number} [page] 分页页码
|
||||
* @param {Number} [limit] 分页大小
|
||||
* @returns {Object}
|
||||
* @example ./api/project/list.json
|
||||
*/
|
||||
|
||||
async list(ctx) {
|
||||
let uid = ctx.request.query.uid,
|
||||
page = ctx.request.query.page || 1,
|
||||
limit = ctx.request.query.limit || 10;
|
||||
|
||||
if (!uid) {
|
||||
return ctx.body = yapi.commons.resReturn(null, 400, '用户id不能为空');
|
||||
}
|
||||
|
||||
try {
|
||||
let result = await this.Model.listWithPaging(uid, page, limit);
|
||||
let count = await this.Model.listCount(uid);
|
||||
|
||||
ctx.body = yapi.commons.resReturn({
|
||||
total: Math.ceil(count / limit),
|
||||
list: result
|
||||
});
|
||||
} catch (err) {
|
||||
ctx.body = yapi.commons.resReturn(null, 402, err.message);
|
||||
}
|
||||
}
|
||||
|
||||
async del(ctx) {
|
||||
let params = ctx.request.body;
|
||||
|
||||
if(params.followid){
|
||||
return ctx.body = yapi.commons.resReturn(null, 400, '关注id不能为空');
|
||||
}
|
||||
|
||||
try {
|
||||
let result = await this.Model.del(params.id);
|
||||
ctx.body = yapi.commons.resReturn(result);
|
||||
} catch (e) {
|
||||
ctx.body = yapi.commons.resReturn(null, 402, e.message);
|
||||
}
|
||||
}
|
||||
|
||||
async add(ctx) {
|
||||
let params = ctx.request.body;
|
||||
params = yapi.commons.handleParams(params, {
|
||||
uid: 'number',
|
||||
projectid: 'number',
|
||||
projectname: 'string',
|
||||
icon: 'string'
|
||||
});
|
||||
|
||||
if (!params.uid) {
|
||||
return ctx.body = yapi.commons.resReturn(null, 400, '用户id不为空');
|
||||
}
|
||||
|
||||
if (!params.projectid) {
|
||||
return ctx.body = yapi.commons.resReturn(null, 400, '项目id不能为空');
|
||||
}
|
||||
|
||||
let checkRepeat = await this.Model.checkProjectRepeat(params.uid,params.projectid);
|
||||
if (checkRepeat) {
|
||||
return ctx.body = yapi.commons.resReturn(null, 401, '项目已关注');
|
||||
}
|
||||
|
||||
if (!params.projectname) {
|
||||
return ctx.body = yapi.commons.resReturn(null, 400, '项目名不能为空');
|
||||
}
|
||||
if (!params.icon) {
|
||||
return ctx.body = yapi.commons.resReturn(null, 400, '项目图标标志不能为空');
|
||||
}
|
||||
|
||||
let data = {
|
||||
uid: params.uid,
|
||||
projectid: params.projectid,
|
||||
projectname: params.projectname,
|
||||
icon: params.icon
|
||||
};
|
||||
|
||||
try {
|
||||
let result = await this.Model.save(data);
|
||||
result = yapi.commons.fieldSelect(result, ['_id', 'uid', 'projectid', 'projectname', 'icon']);
|
||||
ctx.body = yapi.commons.resReturn(result);
|
||||
} catch (e) {
|
||||
ctx.body = yapi.commons.resReturn(null, 402, e.message);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = followController;
|
@ -45,7 +45,7 @@ class logController extends baseController {
|
||||
limit = ctx.request.query.limit || 10;
|
||||
|
||||
if (!typeid) {
|
||||
return ctx.body = yapi.commons.resReturn(null, 400, '项目id不能为空');
|
||||
return ctx.body = yapi.commons.resReturn(null, 400, 'typeid不能为空');
|
||||
}
|
||||
|
||||
try {
|
||||
|
@ -5,6 +5,8 @@ import interfaceModel from '../models/interface.js';
|
||||
import groupModel from '../models/group';
|
||||
import commons from '../utils/commons.js';
|
||||
import userModel from '../models/user.js';
|
||||
import Mock from 'mockjs';
|
||||
const send = require('koa-send');
|
||||
|
||||
class projectController extends baseController {
|
||||
|
||||
@ -77,7 +79,7 @@ class projectController extends baseController {
|
||||
return ctx.body = yapi.commons.resReturn(null, 401, '已存在的项目名');
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (!params.prd_host) {
|
||||
return ctx.body = yapi.commons.resReturn(null, 400, '项目domain不能为空');
|
||||
}
|
||||
@ -98,7 +100,7 @@ class projectController extends baseController {
|
||||
return ctx.body = yapi.commons.resReturn(null, 401, '已存在domain和basepath');
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
let data = {
|
||||
name: params.name,
|
||||
@ -513,6 +515,41 @@ class projectController extends baseController {
|
||||
|
||||
return ctx.body = yapi.commons.resReturn(queryList, 0, 'ok');
|
||||
}
|
||||
|
||||
/**
|
||||
* 下载项目的 Mock 数据
|
||||
* @interface /project/download
|
||||
* @method GET
|
||||
* @category project
|
||||
* @foldnumber 10
|
||||
* @param {String} project_id
|
||||
*/
|
||||
async download(ctx) {
|
||||
const project_id = ctx.request.query.project_id;
|
||||
let interfaceInst = yapi.getInst(interfaceModel);
|
||||
let count = await interfaceInst.list(project_id);
|
||||
console.log(count);
|
||||
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
|
||||
}
|
||||
}));
|
||||
// console.log(arr);
|
||||
|
||||
const fileName = 'mock.js';
|
||||
ctx.attachment(fileName);
|
||||
await send(ctx, fileName, { root: __dirname + '/public' });
|
||||
|
||||
const res = `
|
||||
var data = ${arr}`
|
||||
.trim();
|
||||
return ctx.body = res;
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = projectController;
|
||||
|
@ -46,7 +46,7 @@ module.exports = async (ctx, next) => {
|
||||
|
||||
try {
|
||||
|
||||
interfaceData = await interfaceInst.getByPath(project._id, ctx.path.substr(project.basepath.length), ctx.method);
|
||||
interfaceData = await interfaceInst.getByPath(project._id, ctx.path.substr(project.basepath.length), ctx.method);
|
||||
if (!interfaceData || interfaceData.length === 0) {
|
||||
//非正常跨域预检请求回应
|
||||
if(ctx.method === 'OPTIONS'){
|
||||
@ -65,9 +65,10 @@ module.exports = async (ctx, next) => {
|
||||
ctx.set("Access-Control-Allow-Origin", "*")
|
||||
if (interfaceData.res_body_type === 'json') {
|
||||
try{
|
||||
return ctx.body = Mock.mock(
|
||||
const res = Mock.mock(
|
||||
yapi.commons.json_parse(interfaceData.res_body)
|
||||
);
|
||||
return ctx.body = res;
|
||||
}catch(e){
|
||||
return ctx.body = {
|
||||
errcode: 400,
|
||||
@ -80,4 +81,4 @@ module.exports = async (ctx, next) => {
|
||||
} catch (e) {
|
||||
return ctx.body = yapi.commons.resReturn(null, 409, e.message);
|
||||
}
|
||||
};
|
||||
};
|
||||
|
64
server/models/follow.js
Normal file
64
server/models/follow.js
Normal file
@ -0,0 +1,64 @@
|
||||
import baseModel from './base.js';
|
||||
|
||||
class followModel extends baseModel {
|
||||
getName() {
|
||||
return 'follow';
|
||||
}
|
||||
|
||||
getSchema() {
|
||||
return {
|
||||
uid: { type: Number, required: true },
|
||||
projectid: { type: Number, required: true },
|
||||
projectname: { type: String, required: true },
|
||||
icon: String
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Number} uid 用户id
|
||||
* @param {Number} projectid 项目id
|
||||
* @param {String} projectname 项目名
|
||||
* @param {String} icon 项目图标
|
||||
*/
|
||||
|
||||
save(data) {//关注
|
||||
let saveData = {
|
||||
uid: data.uid,
|
||||
projectid: data.projectid,
|
||||
projectname: data.projectname,
|
||||
icon: data.icon
|
||||
};
|
||||
let follow = new this.model(saveData);
|
||||
return follow.save();
|
||||
}
|
||||
|
||||
del(id){
|
||||
return this.model.deleteOne({
|
||||
_id: id
|
||||
});
|
||||
}
|
||||
|
||||
listWithPaging(uid, page, limit) {
|
||||
page = parseInt(page);
|
||||
limit = parseInt(limit);
|
||||
|
||||
return this.model.find({
|
||||
uid: uid
|
||||
}).skip((page - 1) * limit).limit(limit).exec();
|
||||
}
|
||||
|
||||
listCount(uid) {
|
||||
return this.model.count({
|
||||
uid: uid
|
||||
});
|
||||
}
|
||||
|
||||
checkProjectRepeat(uid,projectid){
|
||||
return this.model.count({
|
||||
uid: uid,
|
||||
projectid: projectid
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = followModel;
|
@ -74,6 +74,7 @@ class interfaceModel extends baseModel {
|
||||
}
|
||||
|
||||
list(project_id) {
|
||||
console.log(project_id);
|
||||
return this.model.find({
|
||||
project_id: project_id
|
||||
})
|
||||
@ -86,7 +87,7 @@ class interfaceModel extends baseModel {
|
||||
_id: id
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
up(id, data) {
|
||||
data.up_time = yapi.commons.time();
|
||||
return this.model.update({
|
||||
@ -95,4 +96,4 @@ class interfaceModel extends baseModel {
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = interfaceModel;
|
||||
module.exports = interfaceModel;
|
||||
|
@ -140,6 +140,14 @@ class projectModel extends baseModel {
|
||||
})
|
||||
.limit(10);
|
||||
}
|
||||
|
||||
download(id) {
|
||||
console.log('models in download');
|
||||
// return this.model.find({
|
||||
// name: new RegExp(id, 'ig')
|
||||
// })
|
||||
// .limit(10);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = projectModel;
|
||||
module.exports = projectModel;
|
||||
|
@ -7,6 +7,7 @@ import interfaceColController from './controllers/interfaceCol.js'
|
||||
import yapi from './yapi.js';
|
||||
import projectController from './controllers/project.js';
|
||||
import logController from './controllers/log.js';
|
||||
import followController from './controllers/follow.js';
|
||||
|
||||
const router = koaRouter();
|
||||
|
||||
@ -39,6 +40,10 @@ const INTERFACE_CONFIG = {
|
||||
prefix: '/log/',
|
||||
controller: logController
|
||||
},
|
||||
follow: {
|
||||
prefix: '/follow/',
|
||||
controller: followController
|
||||
},
|
||||
col: {
|
||||
prefix: '/col/',
|
||||
controller: interfaceColController
|
||||
@ -47,99 +52,99 @@ const INTERFACE_CONFIG = {
|
||||
|
||||
const routerConfig = {
|
||||
"group": [
|
||||
{
|
||||
{
|
||||
"action": "list",
|
||||
"path": "list",
|
||||
"method": "get"
|
||||
},
|
||||
{
|
||||
{
|
||||
"action": "add",
|
||||
"path": "add",
|
||||
"method": "post"
|
||||
},
|
||||
{
|
||||
{
|
||||
"action": "up",
|
||||
"path": "up",
|
||||
"method": "post"
|
||||
},
|
||||
{
|
||||
{
|
||||
"action": "del",
|
||||
"path": "del",
|
||||
"method": "post"
|
||||
},
|
||||
{
|
||||
{
|
||||
"action": "addMember",
|
||||
"path": "add_member",
|
||||
"method": "post"
|
||||
},
|
||||
{
|
||||
{
|
||||
"action": "delMember",
|
||||
"path": "del_member",
|
||||
"method": "post"
|
||||
},
|
||||
{
|
||||
{
|
||||
"action": "getMemberList",
|
||||
"path": "members",
|
||||
"method": "get"
|
||||
}
|
||||
],
|
||||
"user": [
|
||||
{
|
||||
{
|
||||
"action": "login",
|
||||
"path": "login",
|
||||
"method": "post"
|
||||
},
|
||||
{
|
||||
{
|
||||
"action": "reg",
|
||||
"path": "reg",
|
||||
"method": "post"
|
||||
},
|
||||
{
|
||||
{
|
||||
"action": "list",
|
||||
"path": "list",
|
||||
"method": "get"
|
||||
},
|
||||
{
|
||||
{
|
||||
"action": "findById",
|
||||
"path": "find",
|
||||
"method": "get"
|
||||
},
|
||||
{
|
||||
{
|
||||
"action": "update",
|
||||
"path": "update",
|
||||
"method": "post"
|
||||
},
|
||||
{
|
||||
{
|
||||
"action": "del",
|
||||
"path": "del",
|
||||
"method": "post"
|
||||
},
|
||||
{
|
||||
{
|
||||
"action": "getLoginStatus",
|
||||
"path": "status",
|
||||
"method": "get"
|
||||
},
|
||||
{
|
||||
{
|
||||
"action": "logout",
|
||||
"path": "logout",
|
||||
"method": "get"
|
||||
},
|
||||
{
|
||||
{
|
||||
"action": "loginByToken",
|
||||
"path": "login_by_token",
|
||||
"method": "post"
|
||||
},
|
||||
{
|
||||
{
|
||||
"action": "changePassword",
|
||||
"path": "change_password",
|
||||
"method": "post"
|
||||
},
|
||||
{
|
||||
{
|
||||
"action": "search",
|
||||
"path": "search",
|
||||
"method": "get"
|
||||
},
|
||||
{
|
||||
{
|
||||
"action": "nav",
|
||||
"path": "nav",
|
||||
"method": "get"
|
||||
@ -154,69 +159,74 @@ const routerConfig = {
|
||||
}
|
||||
],
|
||||
"project": [
|
||||
{
|
||||
{
|
||||
"action": "add",
|
||||
"path": "add",
|
||||
"method": "post"
|
||||
},
|
||||
{
|
||||
{
|
||||
"action": "list",
|
||||
"path": "list",
|
||||
"method": "get"
|
||||
},
|
||||
{
|
||||
{
|
||||
"action": "get",
|
||||
"path": "get",
|
||||
"method": "get"
|
||||
},
|
||||
{
|
||||
{
|
||||
"action": "up",
|
||||
"path": "up",
|
||||
"method": "post"
|
||||
},
|
||||
{
|
||||
{
|
||||
"action": "del",
|
||||
"path": "del",
|
||||
"method": "post"
|
||||
},
|
||||
{
|
||||
{
|
||||
"action": "addMember",
|
||||
"path": "add_member",
|
||||
"method": "post"
|
||||
},
|
||||
{
|
||||
{
|
||||
"action": "delMember",
|
||||
"path": "del_member",
|
||||
"method": "post"
|
||||
},
|
||||
{
|
||||
{
|
||||
"action": "getMemberList",
|
||||
"path": "get_member_list",
|
||||
"method": "get"
|
||||
},
|
||||
{
|
||||
{
|
||||
"action": "search",
|
||||
"path": "search",
|
||||
"method": "get"
|
||||
},
|
||||
{
|
||||
"action": "download",
|
||||
"path": "download",
|
||||
"method": "get"
|
||||
}
|
||||
],
|
||||
"interface": [
|
||||
{
|
||||
{
|
||||
"action": "add",
|
||||
"path": "add",
|
||||
"method": "post"
|
||||
},
|
||||
{
|
||||
{
|
||||
"action": "list",
|
||||
"path": "list",
|
||||
"method": "get"
|
||||
},
|
||||
{
|
||||
{
|
||||
"action": "get",
|
||||
"path": "get",
|
||||
"method": "get"
|
||||
},
|
||||
{
|
||||
{
|
||||
"action": "up",
|
||||
"path": "up",
|
||||
"method": "post"
|
||||
@ -234,6 +244,19 @@ const routerConfig = {
|
||||
"method": "get"
|
||||
}
|
||||
],
|
||||
"follow": [{
|
||||
"action": "list",
|
||||
"path": "list",
|
||||
"method": "get"
|
||||
},{
|
||||
"action": "add",
|
||||
"path": "add",
|
||||
"method": "post"
|
||||
},{
|
||||
"action": "del",
|
||||
"path": "del",
|
||||
"method": "post"
|
||||
}],
|
||||
"col": [{
|
||||
action: "addCol",
|
||||
path: "add_col",
|
||||
@ -279,7 +302,7 @@ for(let ctrl in routerConfig){
|
||||
actions.forEach( (item) => {
|
||||
createAction(ctrl, item.action, item.path, item.method);
|
||||
} )
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
@ -302,4 +325,4 @@ function createAction(controller, action, path, method) {
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = router;
|
||||
module.exports = router;
|
||||
|
299
server_dist/controllers/follow.js
Normal file
299
server_dist/controllers/follow.js
Normal file
@ -0,0 +1,299 @@
|
||||
'use strict';
|
||||
|
||||
var _regenerator = require('babel-runtime/regenerator');
|
||||
|
||||
var _regenerator2 = _interopRequireDefault(_regenerator);
|
||||
|
||||
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
|
||||
|
||||
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
|
||||
|
||||
var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of');
|
||||
|
||||
var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
|
||||
|
||||
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
|
||||
|
||||
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
|
||||
|
||||
var _createClass2 = require('babel-runtime/helpers/createClass');
|
||||
|
||||
var _createClass3 = _interopRequireDefault(_createClass2);
|
||||
|
||||
var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
|
||||
|
||||
var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
|
||||
|
||||
var _inherits2 = require('babel-runtime/helpers/inherits');
|
||||
|
||||
var _inherits3 = _interopRequireDefault(_inherits2);
|
||||
|
||||
var _yapi = require('../yapi.js');
|
||||
|
||||
var _yapi2 = _interopRequireDefault(_yapi);
|
||||
|
||||
var _base = require('./base.js');
|
||||
|
||||
var _base2 = _interopRequireDefault(_base);
|
||||
|
||||
var _follow = require('../models/follow');
|
||||
|
||||
var _follow2 = _interopRequireDefault(_follow);
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
var followController = function (_baseController) {
|
||||
(0, _inherits3.default)(followController, _baseController);
|
||||
|
||||
function followController(ctx) {
|
||||
(0, _classCallCheck3.default)(this, followController);
|
||||
|
||||
var _this = (0, _possibleConstructorReturn3.default)(this, (followController.__proto__ || (0, _getPrototypeOf2.default)(followController)).call(this, ctx));
|
||||
|
||||
_this.Model = _yapi2.default.getInst(_follow2.default);
|
||||
// try{
|
||||
// var res = this.Model.save({
|
||||
// uid: 107,
|
||||
// projectid: 221,
|
||||
// projectname: 'Flight',
|
||||
// icon: 'code'
|
||||
// });
|
||||
// // var res = this.Model.del(107);
|
||||
// ctx.body = yapi.commons.resReturn(null, 200,res);
|
||||
// }catch(err){
|
||||
// ctx.body = yapi.commons.resReturn(null, 402, err.message);
|
||||
// }
|
||||
|
||||
|
||||
return _this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取节点列表
|
||||
* @interface /node/list
|
||||
* @method GET
|
||||
* @category node
|
||||
* @foldnumber 10
|
||||
* @param {Number} uid 用户id, 不能为空
|
||||
* @param {Number} [page] 分页页码
|
||||
* @param {Number} [limit] 分页大小
|
||||
* @returns {Object}
|
||||
* @example ./api/project/list.json
|
||||
*/
|
||||
|
||||
(0, _createClass3.default)(followController, [{
|
||||
key: 'list',
|
||||
value: function () {
|
||||
var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(ctx) {
|
||||
var uid, page, limit, result, count;
|
||||
return _regenerator2.default.wrap(function _callee$(_context) {
|
||||
while (1) {
|
||||
switch (_context.prev = _context.next) {
|
||||
case 0:
|
||||
uid = ctx.request.query.uid, page = ctx.request.query.page || 1, limit = ctx.request.query.limit || 10;
|
||||
|
||||
if (uid) {
|
||||
_context.next = 3;
|
||||
break;
|
||||
}
|
||||
|
||||
return _context.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 400, '用户id不能为空'));
|
||||
|
||||
case 3:
|
||||
_context.prev = 3;
|
||||
_context.next = 6;
|
||||
return this.Model.listWithPaging(uid, page, limit);
|
||||
|
||||
case 6:
|
||||
result = _context.sent;
|
||||
_context.next = 9;
|
||||
return this.Model.listCount(uid);
|
||||
|
||||
case 9:
|
||||
count = _context.sent;
|
||||
|
||||
|
||||
ctx.body = _yapi2.default.commons.resReturn({
|
||||
total: Math.ceil(count / limit),
|
||||
list: result
|
||||
});
|
||||
_context.next = 16;
|
||||
break;
|
||||
|
||||
case 13:
|
||||
_context.prev = 13;
|
||||
_context.t0 = _context['catch'](3);
|
||||
|
||||
ctx.body = _yapi2.default.commons.resReturn(null, 402, _context.t0.message);
|
||||
|
||||
case 16:
|
||||
case 'end':
|
||||
return _context.stop();
|
||||
}
|
||||
}
|
||||
}, _callee, this, [[3, 13]]);
|
||||
}));
|
||||
|
||||
function list(_x) {
|
||||
return _ref.apply(this, arguments);
|
||||
}
|
||||
|
||||
return list;
|
||||
}()
|
||||
}, {
|
||||
key: 'del',
|
||||
value: function () {
|
||||
var _ref2 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee2(ctx) {
|
||||
var params, result;
|
||||
return _regenerator2.default.wrap(function _callee2$(_context2) {
|
||||
while (1) {
|
||||
switch (_context2.prev = _context2.next) {
|
||||
case 0:
|
||||
params = ctx.request.body;
|
||||
|
||||
if (!params.followid) {
|
||||
_context2.next = 3;
|
||||
break;
|
||||
}
|
||||
|
||||
return _context2.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 400, '关注id不能为空'));
|
||||
|
||||
case 3:
|
||||
_context2.prev = 3;
|
||||
_context2.next = 6;
|
||||
return this.Model.del(params.id);
|
||||
|
||||
case 6:
|
||||
result = _context2.sent;
|
||||
|
||||
ctx.body = _yapi2.default.commons.resReturn(result);
|
||||
_context2.next = 13;
|
||||
break;
|
||||
|
||||
case 10:
|
||||
_context2.prev = 10;
|
||||
_context2.t0 = _context2['catch'](3);
|
||||
|
||||
ctx.body = _yapi2.default.commons.resReturn(null, 402, _context2.t0.message);
|
||||
|
||||
case 13:
|
||||
case 'end':
|
||||
return _context2.stop();
|
||||
}
|
||||
}
|
||||
}, _callee2, this, [[3, 10]]);
|
||||
}));
|
||||
|
||||
function del(_x2) {
|
||||
return _ref2.apply(this, arguments);
|
||||
}
|
||||
|
||||
return del;
|
||||
}()
|
||||
}, {
|
||||
key: 'add',
|
||||
value: function () {
|
||||
var _ref3 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee3(ctx) {
|
||||
var params, checkRepeat, data, result;
|
||||
return _regenerator2.default.wrap(function _callee3$(_context3) {
|
||||
while (1) {
|
||||
switch (_context3.prev = _context3.next) {
|
||||
case 0:
|
||||
params = ctx.request.body;
|
||||
|
||||
params = _yapi2.default.commons.handleParams(params, {
|
||||
uid: 'number',
|
||||
projectid: 'number',
|
||||
projectname: 'string',
|
||||
icon: 'string'
|
||||
});
|
||||
|
||||
if (params.uid) {
|
||||
_context3.next = 4;
|
||||
break;
|
||||
}
|
||||
|
||||
return _context3.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 400, '用户id不为空'));
|
||||
|
||||
case 4:
|
||||
if (params.projectid) {
|
||||
_context3.next = 6;
|
||||
break;
|
||||
}
|
||||
|
||||
return _context3.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 400, '项目id不能为空'));
|
||||
|
||||
case 6:
|
||||
_context3.next = 8;
|
||||
return this.Model.checkProjectRepeat(params.uid, params.projectid);
|
||||
|
||||
case 8:
|
||||
checkRepeat = _context3.sent;
|
||||
|
||||
if (!checkRepeat) {
|
||||
_context3.next = 11;
|
||||
break;
|
||||
}
|
||||
|
||||
return _context3.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 401, '项目已关注'));
|
||||
|
||||
case 11:
|
||||
if (params.projectname) {
|
||||
_context3.next = 13;
|
||||
break;
|
||||
}
|
||||
|
||||
return _context3.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 400, '项目名不能为空'));
|
||||
|
||||
case 13:
|
||||
if (params.icon) {
|
||||
_context3.next = 15;
|
||||
break;
|
||||
}
|
||||
|
||||
return _context3.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 400, '项目图标标志不能为空'));
|
||||
|
||||
case 15:
|
||||
data = {
|
||||
uid: params.uid,
|
||||
projectid: params.projectid,
|
||||
projectname: params.projectname,
|
||||
icon: params.icon
|
||||
};
|
||||
_context3.prev = 16;
|
||||
_context3.next = 19;
|
||||
return this.Model.save(data);
|
||||
|
||||
case 19:
|
||||
result = _context3.sent;
|
||||
|
||||
result = _yapi2.default.commons.fieldSelect(result, ['_id', 'uid', 'projectid', 'projectname', 'icon']);
|
||||
ctx.body = _yapi2.default.commons.resReturn(result);
|
||||
_context3.next = 27;
|
||||
break;
|
||||
|
||||
case 24:
|
||||
_context3.prev = 24;
|
||||
_context3.t0 = _context3['catch'](16);
|
||||
|
||||
ctx.body = _yapi2.default.commons.resReturn(null, 402, _context3.t0.message);
|
||||
|
||||
case 27:
|
||||
case 'end':
|
||||
return _context3.stop();
|
||||
}
|
||||
}
|
||||
}, _callee3, this, [[16, 24]]);
|
||||
}));
|
||||
|
||||
function add(_x3) {
|
||||
return _ref3.apply(this, arguments);
|
||||
}
|
||||
|
||||
return add;
|
||||
}()
|
||||
}]);
|
||||
return followController;
|
||||
}(_base2.default);
|
||||
|
||||
module.exports = followController;
|
@ -103,7 +103,7 @@ var logController = function (_baseController) {
|
||||
break;
|
||||
}
|
||||
|
||||
return _context.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 400, '项目id不能为空'));
|
||||
return _context.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 400, 'typeid不能为空'));
|
||||
|
||||
case 3:
|
||||
_context.prev = 3;
|
||||
|
@ -1,5 +1,9 @@
|
||||
'use strict';
|
||||
|
||||
var _stringify = require('babel-runtime/core-js/json/stringify');
|
||||
|
||||
var _stringify2 = _interopRequireDefault(_stringify);
|
||||
|
||||
var _regenerator = require('babel-runtime/regenerator');
|
||||
|
||||
var _regenerator2 = _interopRequireDefault(_regenerator);
|
||||
@ -56,8 +60,14 @@ var _user = require('../models/user.js');
|
||||
|
||||
var _user2 = _interopRequireDefault(_user);
|
||||
|
||||
var _mockjs = require('mockjs');
|
||||
|
||||
var _mockjs2 = _interopRequireDefault(_mockjs);
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
var send = require('koa-send');
|
||||
|
||||
var projectController = function (_baseController) {
|
||||
(0, _inherits3.default)(projectController, _baseController);
|
||||
|
||||
@ -1161,6 +1171,68 @@ var projectController = function (_baseController) {
|
||||
|
||||
return search;
|
||||
}()
|
||||
|
||||
/**
|
||||
* 下载项目的 Mock 数据
|
||||
* @interface /project/download
|
||||
* @method GET
|
||||
* @category project
|
||||
* @foldnumber 10
|
||||
* @param {String} project_id
|
||||
*/
|
||||
|
||||
}, {
|
||||
key: 'download',
|
||||
value: function () {
|
||||
var _ref12 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee12(ctx) {
|
||||
var project_id, interfaceInst, count, arr, fileName, res;
|
||||
return _regenerator2.default.wrap(function _callee12$(_context12) {
|
||||
while (1) {
|
||||
switch (_context12.prev = _context12.next) {
|
||||
case 0:
|
||||
project_id = ctx.request.query.project_id;
|
||||
interfaceInst = _yapi2.default.getInst(_interface2.default);
|
||||
_context12.next = 4;
|
||||
return interfaceInst.list(project_id);
|
||||
|
||||
case 4:
|
||||
count = _context12.sent;
|
||||
|
||||
console.log(count);
|
||||
arr = (0, _stringify2.default)(count.map(function (item) {
|
||||
// 返回的json模板数据: item.res_body
|
||||
var mockData = _mockjs2.default.mock(_yapi2.default.commons.json_parse(item.res_body));
|
||||
return {
|
||||
path: item.path,
|
||||
mock: mockData
|
||||
};
|
||||
}));
|
||||
// console.log(arr);
|
||||
|
||||
fileName = 'mock.js';
|
||||
|
||||
ctx.attachment(fileName);
|
||||
_context12.next = 11;
|
||||
return send(ctx, fileName, { root: __dirname + '/public' });
|
||||
|
||||
case 11:
|
||||
res = ('\n var data = ' + arr).trim();
|
||||
return _context12.abrupt('return', ctx.body = res);
|
||||
|
||||
case 13:
|
||||
case 'end':
|
||||
return _context12.stop();
|
||||
}
|
||||
}
|
||||
}, _callee12, this);
|
||||
}));
|
||||
|
||||
function download(_x13) {
|
||||
return _ref12.apply(this, arguments);
|
||||
}
|
||||
|
||||
return download;
|
||||
}()
|
||||
}]);
|
||||
return projectController;
|
||||
}(_base2.default);
|
||||
|
@ -28,7 +28,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
||||
|
||||
module.exports = function () {
|
||||
var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(ctx, next) {
|
||||
var hostname, config, projectInst, projects, matchProject, maxBasepath, i, l, _project, project, interfaceData, interfaceInst;
|
||||
var hostname, config, projectInst, projects, matchProject, maxBasepath, i, l, _project, project, interfaceData, interfaceInst, res;
|
||||
|
||||
return _regenerator2.default.wrap(function _callee$(_context) {
|
||||
while (1) {
|
||||
@ -138,15 +138,16 @@ module.exports = function () {
|
||||
ctx.set("Access-Control-Allow-Origin", "*");
|
||||
|
||||
if (!(interfaceData.res_body_type === 'json')) {
|
||||
_context.next = 47;
|
||||
_context.next = 48;
|
||||
break;
|
||||
}
|
||||
|
||||
_context.prev = 40;
|
||||
return _context.abrupt('return', ctx.body = _mockjs2.default.mock(_yapi2.default.commons.json_parse(interfaceData.res_body)));
|
||||
res = _mockjs2.default.mock(_yapi2.default.commons.json_parse(interfaceData.res_body));
|
||||
return _context.abrupt('return', ctx.body = res);
|
||||
|
||||
case 44:
|
||||
_context.prev = 44;
|
||||
case 45:
|
||||
_context.prev = 45;
|
||||
_context.t1 = _context['catch'](40);
|
||||
return _context.abrupt('return', ctx.body = {
|
||||
errcode: 400,
|
||||
@ -154,20 +155,20 @@ module.exports = function () {
|
||||
data: interfaceData.res_body
|
||||
});
|
||||
|
||||
case 47:
|
||||
case 48:
|
||||
return _context.abrupt('return', ctx.body = interfaceData.res_body);
|
||||
|
||||
case 50:
|
||||
_context.prev = 50;
|
||||
case 51:
|
||||
_context.prev = 51;
|
||||
_context.t2 = _context['catch'](25);
|
||||
return _context.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 409, _context.t2.message));
|
||||
|
||||
case 53:
|
||||
case 54:
|
||||
case 'end':
|
||||
return _context.stop();
|
||||
}
|
||||
}
|
||||
}, _callee, undefined, [[10, 16], [25, 50], [40, 44]]);
|
||||
}, _callee, undefined, [[10, 16], [25, 51], [40, 45]]);
|
||||
}));
|
||||
|
||||
return function (_x, _x2) {
|
||||
|
109
server_dist/models/follow.js
Normal file
109
server_dist/models/follow.js
Normal file
@ -0,0 +1,109 @@
|
||||
'use strict';
|
||||
|
||||
var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of');
|
||||
|
||||
var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
|
||||
|
||||
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
|
||||
|
||||
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
|
||||
|
||||
var _createClass2 = require('babel-runtime/helpers/createClass');
|
||||
|
||||
var _createClass3 = _interopRequireDefault(_createClass2);
|
||||
|
||||
var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
|
||||
|
||||
var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
|
||||
|
||||
var _inherits2 = require('babel-runtime/helpers/inherits');
|
||||
|
||||
var _inherits3 = _interopRequireDefault(_inherits2);
|
||||
|
||||
var _base = require('./base.js');
|
||||
|
||||
var _base2 = _interopRequireDefault(_base);
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
var followModel = function (_baseModel) {
|
||||
(0, _inherits3.default)(followModel, _baseModel);
|
||||
|
||||
function followModel() {
|
||||
(0, _classCallCheck3.default)(this, followModel);
|
||||
return (0, _possibleConstructorReturn3.default)(this, (followModel.__proto__ || (0, _getPrototypeOf2.default)(followModel)).apply(this, arguments));
|
||||
}
|
||||
|
||||
(0, _createClass3.default)(followModel, [{
|
||||
key: 'getName',
|
||||
value: function getName() {
|
||||
return 'follow';
|
||||
}
|
||||
}, {
|
||||
key: 'getSchema',
|
||||
value: function getSchema() {
|
||||
return {
|
||||
uid: { type: Number, required: true },
|
||||
projectid: { type: Number, required: true },
|
||||
projectname: { type: String, required: true },
|
||||
icon: String
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Number} uid 用户id
|
||||
* @param {Number} projectid 项目id
|
||||
* @param {String} projectname 项目名
|
||||
* @param {String} icon 项目图标
|
||||
*/
|
||||
|
||||
}, {
|
||||
key: 'save',
|
||||
value: function save(data) {
|
||||
//关注
|
||||
var saveData = {
|
||||
uid: data.uid,
|
||||
projectid: data.projectid,
|
||||
projectname: data.projectname,
|
||||
icon: data.icon
|
||||
};
|
||||
var follow = new this.model(saveData);
|
||||
return follow.save();
|
||||
}
|
||||
}, {
|
||||
key: 'del',
|
||||
value: function del(id) {
|
||||
return this.model.deleteOne({
|
||||
_id: id
|
||||
});
|
||||
}
|
||||
}, {
|
||||
key: 'listWithPaging',
|
||||
value: function listWithPaging(uid, page, limit) {
|
||||
page = parseInt(page);
|
||||
limit = parseInt(limit);
|
||||
|
||||
return this.model.find({
|
||||
uid: uid
|
||||
}).skip((page - 1) * limit).limit(limit).exec();
|
||||
}
|
||||
}, {
|
||||
key: 'listCount',
|
||||
value: function listCount(uid) {
|
||||
return this.model.count({
|
||||
uid: uid
|
||||
});
|
||||
}
|
||||
}, {
|
||||
key: 'checkProjectRepeat',
|
||||
value: function checkProjectRepeat(uid, projectid) {
|
||||
return this.model.count({
|
||||
uid: uid,
|
||||
projectid: projectid
|
||||
});
|
||||
}
|
||||
}]);
|
||||
return followModel;
|
||||
}(_base2.default);
|
||||
|
||||
module.exports = followModel;
|
@ -117,6 +117,7 @@ var interfaceModel = function (_baseModel) {
|
||||
}, {
|
||||
key: 'list',
|
||||
value: function list(project_id) {
|
||||
console.log(project_id);
|
||||
return this.model.find({
|
||||
project_id: project_id
|
||||
}).sort({ _id: -1 }).exec();
|
||||
|
@ -184,6 +184,15 @@ var projectModel = function (_baseModel) {
|
||||
name: new RegExp(keyword, 'ig')
|
||||
}).limit(10);
|
||||
}
|
||||
}, {
|
||||
key: 'download',
|
||||
value: function download(id) {
|
||||
console.log('models in download');
|
||||
// return this.model.find({
|
||||
// name: new RegExp(id, 'ig')
|
||||
// })
|
||||
// .limit(10);
|
||||
}
|
||||
}]);
|
||||
return projectModel;
|
||||
}(_base2.default);
|
||||
|
@ -40,6 +40,10 @@ var _log = require('./controllers/log.js');
|
||||
|
||||
var _log2 = _interopRequireDefault(_log);
|
||||
|
||||
var _follow = require('./controllers/follow.js');
|
||||
|
||||
var _follow2 = _interopRequireDefault(_follow);
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
var router = (0, _koaRouter2.default)();
|
||||
@ -73,6 +77,10 @@ var INTERFACE_CONFIG = {
|
||||
prefix: '/log/',
|
||||
controller: _log2.default
|
||||
},
|
||||
follow: {
|
||||
prefix: '/follow/',
|
||||
controller: _follow2.default
|
||||
},
|
||||
col: {
|
||||
prefix: '/col/',
|
||||
controller: _interfaceCol2.default
|
||||
@ -202,6 +210,10 @@ var routerConfig = {
|
||||
"action": "search",
|
||||
"path": "search",
|
||||
"method": "get"
|
||||
}, {
|
||||
"action": "download",
|
||||
"path": "download",
|
||||
"method": "get"
|
||||
}],
|
||||
"interface": [{
|
||||
"action": "add",
|
||||
@ -229,6 +241,19 @@ var routerConfig = {
|
||||
"path": "list",
|
||||
"method": "get"
|
||||
}],
|
||||
"follow": [{
|
||||
"action": "list",
|
||||
"path": "list",
|
||||
"method": "get"
|
||||
}, {
|
||||
"action": "add",
|
||||
"path": "add",
|
||||
"method": "post"
|
||||
}, {
|
||||
"action": "del",
|
||||
"path": "del",
|
||||
"method": "post"
|
||||
}],
|
||||
"col": [{
|
||||
action: "addCol",
|
||||
path: "add_col",
|
||||
|
Loading…
Reference in New Issue
Block a user