Commit 554510d5 authored by zhouzihao's avatar zhouzihao

Initial commit

parents
Pipeline #108 canceled with stages
node_modules/
.vscode
\ No newline at end of file
# devlop rest api
## 启动时要一个安装了ssh git的node镜像
var db = require("../db/pool");
var _ = require('lodash');
var helper = require('../tools/helper')
module.exports = {
// 获取环境值列表
getList: helper.listAllBuilder('env',"*",{}),
//新建修改接口 post
saveEnv: helper.saveBuilder('env','env_id'),
};
\ No newline at end of file
var db = require("../db/pool");
var _ = require('lodash');
var helper = require("../tools/helper");
/**
* 项目相关接口
*/
module.exports = {
// 获取全部的长度
getCount: helper.listAllBuilder('project', {
lengrh: { $count: 'p_id' }
}, {}, (x) => {
if (_.isArray(x) && !_.isEmpty(x)) {
return x[0];
} else {
return x;
}
}),
// 获取全部列表
getList: helper.listAllBuilder('project', '*', {}),
// 获取分页列表
getPagedList: (req, res) => {
//
},
//新建更新数据
saveProject: helper.saveBuilder('project', 'p_id'),
};
\ No newline at end of file
const dbConfig = {
host:"mysql.docker.local",
username:"root",
password:"Zz123456zZ",
database:"devlop"
}
module.exports = dbConfig;
\ No newline at end of file
const mysql = require('mysql');
const dbConfig = require('../config/db')
const SQLBuilder = require('json-sql-builder2');
var sql = new SQLBuilder('MySQL');
const pool = mysql.createPool({
host: dbConfig.host,
user: dbConfig.username,
password: dbConfig.password,
database: dbConfig.database,
port: 3306
});
//ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'Zz123456zZ';
const query = function (sql,values) {
return new Promise((resolve, reject) => {
pool.getConnection((err, connection) => {
if (err) {
reject(err);
} else {
connection.query(sql, values,(err, rows) => {
if (err) {
connection.release();
reject(err);
} else {
// console.log( rows );
connection.release();
resolve(rows);
}
});
}
});
});
};
module.exports = {
pool,
query,
sql
};
\ No newline at end of file
const app = require("./route")
var server = app.listen(3000, "0.0.0.0", function () {
var host = server.address().address
var port = server.address().port
console.log("Example app listening at http://%s:%s", host, port)
});
This diff is collapsed.
{
"name": "devlop-rest-api",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "zhouzihao",
"license": "ISC",
"dependencies": {
"body-parser": "^1.16.1",
"express": "^4.14.1",
"json-sql-builder2": "^1.0.24",
"lodash": "^4.17.15",
"mysql": "^2.13.0"
}
}
var http = require("http");
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var envApi = require("./api/envApi");
var projectApi = require("./api/projectApi");
app.use(bodyParser.json()); // to support JSON-encoded bodies
app.use(bodyParser.urlencoded({ // to support URL-encoded bodies
extended: true
}));
// todo add route
// test api
app.get("/test", (req, res) => {
res.end("how dare you do this!");
});
// env apis
app.get("/env/", envApi.getList);
app.post("/env/", envApi.saveEnv);
// project apis
app.post("/project/", projectApi.saveProject);
app.get("/project/", projectApi.getList);
app.get("/project/len", projectApi.getCount);
module.exports = app;
\ No newline at end of file
var db = require("../db/pool");
var _ = require('lodash');
/**
* 保存Json到指的的表中。
* @param {*} json 要保存的数据
* @param {*} table 数据表名称
* @param {*} key 主键名称
*/
var saveJsonToDb = (json, table, key) => {
return new Promise((resovle, reject) => {
var sql = "";
if (_.has(json, key) && _.get(json, key, 0) > 0) {
var id = _.get(json, key);
_.unset(json, key);
var where = {};
where[key] = id;
// update
sql = db.sql.$update({
$table: table,
$set: json,
$where: where
});
} else {
_.unset(json, key);
// insert
sql = db.sql.$insert({
$table: table,
$documents: json
});
}
db.query(sql.sql, sql.values)
.then((rows) => {
resovle({ ok: 1 });
}).catch((err) => {
reject(JSON.stringify(err));
});
});
};
/**
* 通过json条件获取数据库内数据列表
* @param {*} json 查询条件
* @param {*} table 数据表名称
* @param {*} items 要查询的字段
*/
var listDbByJson = (json, table, items) => {
return new Promise((resovle, reject) => {
var query = {};
//整理字段
if (_.isString(items) && items != "*") {
//单独项目查询
var map = {};
map[items] = true;
query['$columns'] = map;
} else if (_.isArray(items)) {
var map = {};
items.forEach((v) => {
map[v] = true;
})
query['$columns'] = map;
} else if (_.isObject(items)) {
var citems = Object.assign({}, items);
query = _.merge(query, citems);
}
var cloned = Object.assign({}, json);
query['$where'] = cloned;
query['$from'] = table;
var sql = db.sql.$select(query);
db.query(sql.sql, sql.values)
.then((rows) => {
resovle(rows);
}).catch((err) => {
reject(JSON.stringify(err));
});
});
}
module.exports = {
saveJsonToDb,
listDbByJson,
}
\ No newline at end of file
var _ = require('lodash');
var databaseHelper = require("./databaseHelper")
/**
* 辅助生成save方法
* @param {string}} table 表名
* @param {string} key 主键名
*/
var saveBuilder = (table, key) => {
return (req, res) => {
var body = req.body;
databaseHelper.saveJsonToDb(body, table, key)
.then((data) => {
res.end(JSON.stringify(data));
}).catch((err) => {
res.end(err);
})
};
}
/**
* 全量查询生成器
* @param {string} table 表名
* @param {Object|Array|string} items 查询项目
* @param {Array} condition 查询条件
* @param {*} translate 数据转换
*/
var listAllBuilder = (table, items, condition, translate = (x) => { return x }) => {
return (req, res) => {
var cloned = Object.assign({}, condition);;
if (!_.isEmpty(req.query)) {
cloned = _.merge(cloned, req.query);
}
databaseHelper.listDbByJson(cloned, table, items)
.then((data) => {
res.end(JSON.stringify(translate(data)));
}).catch((err) => {
res.end(err);
})
};
}
module.exports = {
saveBuilder,
listAllBuilder,
};
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment