脑图画起来倒是挺爽的,但是到了编码阶段居然这么卡。哎,能力下降了。
文件图
服务文件
第一层服务
用node开一个web服务,做路由判断,加载具体的服务文件。
http.createServer((req, res) => {
// 设置响应头
res.writeHeader(200, {
"Content-Type" : "application/json"
})
// 解构获取 URL、请求方法和头部对象
const { url, method, headers } = req
// 请求体
getBody(req).then(body => {
// 判断url,加载对应的服务
const arr = url.split('/')
if (arr.length >= 3) { // 符合 /api/serverid/dataid 的形式
const serverId = arr[2]
const dataId = arr.length > 2 ? arr[3]: ''
switch (arr[1]) {
case 'api':
const servers = require('./src/services/index.js')
servers(serverId, dataId, body).then((data) => {
res.write(JSON.stringify(data, null, 2))
res.end()
})
break
}
}
}).catch(err => {
console.log(err.msg, err.body)
})
})
.listen(6000, () => {
console.log('服务已经开启:http://localhost:6000')
})
虽然现在只有一个路由,但是还是先做个判断。
第二层服务
根据服务ID,加载服务的meta,判断服务类型,加载对应的服务文件,实现服务。
// 引入help
const { MySQLHelp } = require('../../packages/mysql.js')
// 获取配置信息
const config = require('../../public/config/mysql-test.json')
// 创建实例
const help = new MySQLHelp(config)
/**
* 实现服务的第一层,判断服务类型
* @param {object} data
*
*/
function servers(serverId, dataId, data) {
// 根据服务ID加载服务meta,分析服务类型
const serJson = require(`../../public/service/${serverId}.json` )
return new Promise((resolve, reject) => {
// 加载具体的服务文件
const service = require(`./${serJson.kind}.js` )
service (help, serJson, data).then((res) => {
resolve(res)
})
})
}
module.exports = servers
js的加载方式还是非常放飞自我的,拼接字符串就可以把文件加载进来,然后只需要统一参数就可以调用各种各样的函数了。
{
"serviceId": 10,
"serviceName": "添加aaa的",
"title": "添加xx信息",
"kind": "model-add",
"metaId": ["10-test-add"]
}
第三层服务
这里就是具体的实现服务的代码了,上面其实还是属于路由的部分,只不过是按照功能来路由的。
// 引入help
const { addData } = require('../../packages/mysql.js')
// 实现添加数据的服务
const add = (help, serviceInfo, model) => {
return new Promise((resolve, reject) => {
// 加载meta
metaId = serviceInfo.metaId[0]
const info = require(`../../public/meta/${metaId}.json`)
addData(help, info, model).then((newId) => {
// 添加成功
resolve({
newId
})
})
})
}
module.exports = add
{
"tableName": "aaa",
"idKey": "id",
"cols": {
"aaacol": "json"
}
}
这样一个基础的添加服务就实现了。
当然这个比较基础,还需要填上其他各种辅助功能才行。
返回格式
这个还没想好。基本上是code、data两个部分。
接口格式
还是没想好。
不打算采用 RESTful,因为不够灵活。虽然看起来挺像的。
也不打算采用 Graphql,因为结构为啥要从前端传递?直接放在后端不香吗?
所以,你看上面那个json是不是很眼熟?
这个不是前端传递,而是直接放在后端,前端只需要传递个编号上来即可。
json文件结构
这样在服务端保存好,不是更方便和安全吗?