init project path

This commit is contained in:
sean 2017-07-03 16:16:05 +08:00
parent d8e31bcd4e
commit bb6e1b41f1
24 changed files with 681 additions and 17 deletions

4
.gitignore vendored
View File

@ -31,4 +31,6 @@ Thumbs.db
# *.war
# *.zip
# *.tar
# *.tar.gz
# *.tar.gz
node_modules/

View File

@ -1,17 +1,8 @@
#### ***文中链接各位根据自己项目对应修改***
--------------------------------------------------------------------------------
#### **项目管理**
#### *PMO*:(http://pmo.corp.qunar.com)<br />
--------------------------------------------------------------------------------
#### **CI/CD**:
#### *QDR*:(http://qdr.corp.qunar.com/)<br />
#### *QCI*:(http://qci.corp.qunar.com/)<br />
#### *CABLE*:(http://wanshiwu.corp.qunar.com/qualitycheck/index/)<br />
### Yapi是一个高效易用功能强大的api管理系统
#### 后台server如何启动和热更新
1. npm install
2. gulp
3. npm run dev-server
--------------------------------------------------------------------------------
#### **质量管理**:
#### *bugfree*:(http://svn.corp.qunar.com/bugfree)<br />
#### *case*:(http://bugfree.corp.qunar.com/bugfree/index.php/case)<br />
--------------------------------------------------------------------------------
#### **项目信息**:
#### *wiki*:(http://wiki.corp.qunar.com/)<br />

32
gulpfile.js Normal file
View File

@ -0,0 +1,32 @@
const fs = require('fs-extra');
const gulp = require('gulp');
const babel = require('gulp-babel');
const watch = require('gulp-watch');
const nodemon = require('nodemon');
const dist = './server_dist/'
gulp.task('default', ['clearLib', 'compileJS']);
gulp.task('clearLib', [], function() {
return fs.removeSync(dist)
});
gulp.task('compileJS', ['clearLib'], function() {
var babelProcess = babel({
presets: ['es2015', "stage-3"],
plugins: ['transform-runtime']
})
babelProcess.on('error', function(e) {
console.log(e);
process.exit(1);
});
gulp.src('server/**/*.!(js)').pipe(gulp.dest(dist));
return watch(['server/**/*.js'], {
verbose: true,
ignoreInitial: false
}).pipe(babelProcess).pipe(gulp.dest(dist));
})

3
nodemon.json Normal file
View File

@ -0,0 +1,3 @@
{
"watch": ["lib/"]
}

45
package.json Normal file
View File

@ -0,0 +1,45 @@
{
"name": "yapi",
"version": "1.0.0",
"description": "-------------------------------------------------------------------------------- #### **项目管理** #### *PMO*:(http://pmo.corp.qunar.com)<br /> -------------------------------------------------------------------------------- #### **CI/CD**: #### *QDR*:(http://qdr.corp.qunar.com/)<br /> #### *QCI*:(http://qci.corp.qunar.com/)<br /> #### *CABLE*:(http://wanshiwu.corp.qunar.com/qualitycheck/index/)<br />",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"build-server": "babel server -d server_dist",
"dev-server": "nodemon server_dist/app.js dev"
},
"repository": {
"type": "git",
"url": "git@gitlab.corp.qunar.com:wenxiong.su/yapi.git"
},
"author": "",
"license": "ISC",
"dependencies": {
"fs-extra": "^3.0.1",
"koa": "^2.0.0",
"koa-bodyparser": "^3.2.0",
"koa-logger": "^3.0.0",
"koa-mysql-session": "0.0.2",
"koa-router": "^7.0.1",
"koa-send": "^3.2.0",
"koa-session-minimal": "^3.0.3",
"koa-static": "^3.0.0",
"koa-views": "^5.2.0",
"mongoose": "4.10.8"
},
"devDependencies": {
"babel-cli": "^6.24.1",
"babel-plugin-transform-runtime": "^6.23.0",
"babel-preset-es2015": "^6.24.1",
"babel-preset-stage-3": "^6.24.1",
"fs-extra": "^3.0.1",
"gulp": "^3.9.1",
"gulp-babel": "^6.1.2",
"gulp-watch": "^4.3.11",
"nodemon": "^1.11.0"
},
"engines": {
"node": ">= 6.0.0",
"npm": ">= 3.0.0"
}
}

22
server/app.js Normal file
View File

@ -0,0 +1,22 @@
import path from 'path'
import init from'./init.js'
import fs from 'fs-extra'
import prdConfig from './config.json'
import devConfig from './config.dev.json'
let args = process.argv.splice(2);
let isDev = args[0] === 'dev' ? true : false;
const config = isDev ? devConfig : prdConfig;
global.WEBROOT = path.resolve(__dirname, '..');
global.WEBROOT_SERVER = __dirname;
global.WEBROOT_RUNTIME = path.join(WEBROOT, 'runtime');
global.WEBROOT_LOG = path.join(WEBROOT_RUNTIME, 'log');
global.WEBCONFIG = config;
init();

8
server/config.dev.json Normal file
View File

@ -0,0 +1,8 @@
{
"port": "3000",
"db": {
"servername": "localhost",
"DATABASE": "yapi",
"port": 27017
}
}

8
server/config.json Normal file
View File

@ -0,0 +1,8 @@
{
"port":"80",
"db": {
"servername": "localhost",
"DATABASE": "yapi",
"port": "27017"
}
}

View File

@ -0,0 +1,20 @@
import { resReturn,log } from '../utils/commons';
import interfaceModel from '../models/interface.js'
module.exports = {
async add(ctx) {
let data = {
title: 'yapi',
content: 'content',
uid: 'abc'
}
let result = await interfaceModel.save(data);
log('interface err...', 'error');
ctx.body = resReturn(result)
},
async list(ctx) {
let data = interfaceModel.find();
ctx.body = 1;
}
}

37
server/init.js Normal file
View File

@ -0,0 +1,37 @@
import path from 'path'
import commons from './utils/commons.js'
import fs from 'fs-extra'
import mongoose from 'mongoose'
import db from './utils/db.js'
import Koa from 'koa'
import convert from 'koa-convert'
import koaStatic from 'koa-static'
import bodyParser from 'koa-bodyparser'
import router from './router.js'
function runSever(){
const app = new Koa()
app.use(bodyParser())
app.use(koaStatic(
path.join(WEBROOT,'static')
))
app.use(router.routes())
app.use(router.allowedMethods())
app.listen( WEBCONFIG.port )
commons.log(`the server is start at port ${WEBCONFIG.port}`)
}
module.exports = ()=>{
global.yapi = {
db: mongoose,
commons: commons,
fs: fs,
path: path
}
fs.ensureDirSync(WEBROOT_RUNTIME);
fs.ensureDirSync(WEBROOT_LOG);
db();
runSever();
}

View File

@ -0,0 +1,31 @@
import mongoose from 'mongoose'
const Schema = mongoose.Schema;
const interfaceSchema = new Schema({
title: String,
content: String,
uid: String
})
var interfaceModel = mongoose.model('interface', interfaceSchema);
function save(data){
let m = new interfaceModel(data);
return m.save();
}
function findById(id){
return interfaceModel.findOne({
_id: id
}, 'title content')
}
function find(){
return interfaceModel.find({title: 2222}).exec()
}
module.exports = {
save: save,
findById: findById,
find: find
}

17
server/router.js Normal file
View File

@ -0,0 +1,17 @@
import koaRouter from 'koa-router'
import interfaceController from './controllers/interface'
let router = koaRouter();
const interface_PREFIX = {
interface: '/interface/',
user: '/user/'
};
router.get ( interface_PREFIX.interface + 'add', interfaceController.add)
.get ( interface_PREFIX.interface + 'list', interfaceController.list)
module.exports = router

57
server/utils/commons.js Normal file
View File

@ -0,0 +1,57 @@
import fs from 'fs-extra'
import path from 'path'
exports.resReturn = (data, num, errmsg)=> {
num = num || 0;
return {
errcode: num,
errmsg: errmsg || 'success',
data: data
}
}
const MSGTYPE = {
'log' : 'Log',
'warn' : 'warning',
'error': 'Error'
}
exports.log = (msg, type) => {
if(!msg) return;
type = type || 'log';
let f;
switch(type){
case 'log': f = console.log; break;
case 'warn': f = console.warn; break;
case 'error': f= console.error; break;
default : f = console.log; break;
}
f(type + ':', msg);
let date = new Date();
let year = date.getFullYear();
let month = date.getMonth();
let logfile = path.join(WEBROOT_LOG, year + '-' + month + '.log');
if(typeof msg === 'object'){
if(msg instanceof Error) msg = msg.message;
else msg = JSON.stringify(msg);
}
let data= (new Date).toLocaleTimeString() + "\t|\t" + type + "\t|\t" + msg;
fs.writeFileSync(logfile, data, {
flag: 'w+'
});
}
exports.fileExist = (filePath) =>{
try {
return fs.statSync(filePath).isFile();
} catch (err) {
return false;
}
}

29
server/utils/db.js Normal file
View File

@ -0,0 +1,29 @@
import path from 'path'
import mongoose from 'mongoose'
import {fileExist, log} from './commons.js'
function init(){
mongoose.Promise = global.Promise;
let config = WEBCONFIG;
let db = mongoose.connect(`mongodb://${config.db.servername}:${config.db.port}/${config.db.DATABASE}`);
db.then(function (res) {
log('mongodb load success...')
}, function (err) {
log(err, 'Mongo connect error');
})
checkDatabase();
return db;
}
function checkDatabase(){
let exist = fileExist(path.join(WEBROOT_RUNTIME, 'init.lock'))
if(!exist){
log('lock is not exist')
}
}
export default init;

35
server_dist/app.js Normal file
View File

@ -0,0 +1,35 @@
'use strict';
var _path = require('path');
var _path2 = _interopRequireDefault(_path);
var _init = require('./init.js');
var _init2 = _interopRequireDefault(_init);
var _fsExtra = require('fs-extra');
var _fsExtra2 = _interopRequireDefault(_fsExtra);
var _config = require('./config.json');
var _config2 = _interopRequireDefault(_config);
var _configDev = require('./config.dev.json');
var _configDev2 = _interopRequireDefault(_configDev);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var args = process.argv.splice(2);
var isDev = args[0] === 'dev' ? true : false;
var config = isDev ? _configDev2.default : _config2.default;
global.WEBROOT = _path2.default.resolve(__dirname, '..');
global.WEBROOT_SERVER = __dirname;
global.WEBROOT_RUNTIME = _path2.default.join(WEBROOT, 'runtime');
global.WEBROOT_LOG = _path2.default.join(WEBROOT_RUNTIME, 'log');
global.WEBCONFIG = config;
(0, _init2.default)();

View File

@ -0,0 +1,8 @@
{
"port": "3000",
"db": {
"servername": "localhost",
"DATABASE": "yapi",
"port": 27017
}
}

8
server_dist/config.json Normal file
View File

@ -0,0 +1,8 @@
{
"port":"80",
"db": {
"servername": "localhost",
"DATABASE": "yapi",
"port": "27017"
}
}

View File

@ -0,0 +1,72 @@
'use strict';
var _regenerator = require('babel-runtime/regenerator');
var _regenerator2 = _interopRequireDefault(_regenerator);
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
var _commons = require('../utils/commons');
var _interface = require('../models/interface.js');
var _interface2 = _interopRequireDefault(_interface);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
module.exports = {
add: function add(ctx) {
var _this = this;
return (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee() {
var data, result;
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
data = {
title: 'yapi',
content: 'content',
uid: 'abc'
};
_context.next = 3;
return _interface2.default.save(data);
case 3:
result = _context.sent;
(0, _commons.log)('interface err...', 'error');
ctx.body = (0, _commons.resReturn)(result);
case 6:
case 'end':
return _context.stop();
}
}
}, _callee, _this);
}))();
},
list: function list(ctx) {
var _this2 = this;
return (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee2() {
var data;
return _regenerator2.default.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
data = _interface2.default.find();
ctx.body = 1;
case 2:
case 'end':
return _context2.stop();
}
}
}, _callee2, _this2);
}))();
}
};

66
server_dist/init.js Normal file
View File

@ -0,0 +1,66 @@
'use strict';
var _path = require('path');
var _path2 = _interopRequireDefault(_path);
var _commons = require('./utils/commons.js');
var _commons2 = _interopRequireDefault(_commons);
var _fsExtra = require('fs-extra');
var _fsExtra2 = _interopRequireDefault(_fsExtra);
var _mongoose = require('mongoose');
var _mongoose2 = _interopRequireDefault(_mongoose);
var _db = require('./utils/db.js');
var _db2 = _interopRequireDefault(_db);
var _koa = require('koa');
var _koa2 = _interopRequireDefault(_koa);
var _koaConvert = require('koa-convert');
var _koaConvert2 = _interopRequireDefault(_koaConvert);
var _koaStatic = require('koa-static');
var _koaStatic2 = _interopRequireDefault(_koaStatic);
var _koaBodyparser = require('koa-bodyparser');
var _koaBodyparser2 = _interopRequireDefault(_koaBodyparser);
var _router = require('./router.js');
var _router2 = _interopRequireDefault(_router);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function runSever() {
var app = new _koa2.default();
app.use((0, _koaBodyparser2.default)());
app.use((0, _koaStatic2.default)(_path2.default.join(WEBROOT, 'static')));
app.use(_router2.default.routes());
app.use(_router2.default.allowedMethods());
app.listen(WEBCONFIG.port);
_commons2.default.log('the server is start at port ' + WEBCONFIG.port);
}
module.exports = function () {
global.yapi = {
db: _mongoose2.default,
commons: _commons2.default,
fs: _fsExtra2.default,
path: _path2.default
};
_fsExtra2.default.ensureDirSync(WEBROOT_RUNTIME);
_fsExtra2.default.ensureDirSync(WEBROOT_LOG);
(0, _db2.default)();
runSever();
};

View File

@ -0,0 +1,37 @@
'use strict';
var _mongoose = require('mongoose');
var _mongoose2 = _interopRequireDefault(_mongoose);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var Schema = _mongoose2.default.Schema;
var interfaceSchema = new Schema({
title: String,
content: String,
uid: String
});
var interfaceModel = _mongoose2.default.model('interface', interfaceSchema);
function save(data) {
var m = new interfaceModel(data);
return m.save();
}
function findById(id) {
return interfaceModel.findOne({
_id: id
}, 'title content');
}
function find() {
return interfaceModel.find({ title: 2222 }).exec();
}
module.exports = {
save: save,
findById: findById,
find: find
};

22
server_dist/router.js Normal file
View File

@ -0,0 +1,22 @@
'use strict';
var _koaRouter = require('koa-router');
var _koaRouter2 = _interopRequireDefault(_koaRouter);
var _interface = require('./controllers/interface');
var _interface2 = _interopRequireDefault(_interface);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var router = (0, _koaRouter2.default)();
var interface_PREFIX = {
interface: '/interface/',
user: '/user/'
};
router.get(interface_PREFIX.interface + 'add', _interface2.default.add).get(interface_PREFIX.interface + 'list', _interface2.default.list);
module.exports = router;

View File

@ -0,0 +1,72 @@
'use strict';
var _stringify = require('babel-runtime/core-js/json/stringify');
var _stringify2 = _interopRequireDefault(_stringify);
var _typeof2 = require('babel-runtime/helpers/typeof');
var _typeof3 = _interopRequireDefault(_typeof2);
var _fsExtra = require('fs-extra');
var _fsExtra2 = _interopRequireDefault(_fsExtra);
var _path = require('path');
var _path2 = _interopRequireDefault(_path);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
exports.resReturn = function (data, num, errmsg) {
num = num || 0;
return {
errcode: num,
errmsg: errmsg || 'success',
data: data
};
};
var MSGTYPE = {
'log': 'Log',
'warn': 'warning',
'error': 'Error'
};
exports.log = function (msg, type) {
if (!msg) return;
type = type || 'log';
var f = void 0;
switch (type) {
case 'log':
f = console.log;break;
case 'warn':
f = console.warn;break;
case 'error':
f = console.error;break;
default:
f = console.log;break;
}
f(type + ':', msg);
var date = new Date();
var year = date.getFullYear();
var month = date.getMonth();
var logfile = _path2.default.join(WEBROOT_LOG, year + '-' + month + '.log');
if ((typeof msg === 'undefined' ? 'undefined' : (0, _typeof3.default)(msg)) === 'object') {
if (msg instanceof Error) msg = msg.message;else msg = (0, _stringify2.default)(msg);
}
var data = new Date().toLocaleTimeString() + "\t|\t" + type + "\t|\t" + msg;
_fsExtra2.default.writeFileSync(logfile, data, {
flag: 'w+'
});
};
exports.fileExist = function (filePath) {
try {
return _fsExtra2.default.statSync(filePath).isFile();
} catch (err) {
return false;
}
};

41
server_dist/utils/db.js Normal file
View File

@ -0,0 +1,41 @@
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _path = require('path');
var _path2 = _interopRequireDefault(_path);
var _mongoose = require('mongoose');
var _mongoose2 = _interopRequireDefault(_mongoose);
var _commons = require('./commons.js');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function init() {
_mongoose2.default.Promise = global.Promise;
var config = WEBCONFIG;
var db = _mongoose2.default.connect('mongodb://' + config.db.servername + ':' + config.db.port + '/' + config.db.DATABASE);
db.then(function (res) {
(0, _commons.log)('mongodb load success...');
}, function (err) {
(0, _commons.log)(err, 'Mongo connect error');
});
checkDatabase();
return db;
}
function checkDatabase() {
var exist = (0, _commons.fileExist)(_path2.default.join(WEBROOT_RUNTIME, 'init.lock'));
if (!exist) {
(0, _commons.log)('lock is not exist');
}
}
exports.default = init;

1
static/index.html Normal file
View File

@ -0,0 +1 @@
hello yapi!