UNPKG

mm_os

Version:

这是超级美眉服务端框架,用于快速构建应用程序。

160 lines (149 loc) 3.11 kB
const Item = require('mm_machine').Item; /** * Api接口驱动类 * @extends {Item} * @class */ class Drive extends Item { /** * 构造函数 * @param {String} dir 当前目录 * @constructor */ constructor(dir) { /** * 定义当前RPC文件路径 */ this.rpc_file_now = ""; /** * 定义rpc 方法 */ this.methods = {}; } } /** * 获取现有参数 * @param {String} file 文件名 * @return {Object} 获取的对象 */ Drive.prototype.getParam = function(file) { if ($.param) { var obj = $.param.list.getObj({ filename: file }); if (obj) { return obj; } } return null; }; /** * 设置参数对象 * @param {Object} param 参数对象 */ Drive.prototype.setParam = function(param) { if ($.param) { var lt = $.param.list; if (lt) { var has = false; var len = lt.length; for (var i = 0; i < len; i++) { var o = lt[i]; if (param.filename === o.filename) { $.param.list[i] = param; has = true; break; } } if (!has) { $.param.list.push(param); } } } }; /** * 加载参数 * @param {String} file_path 文件路径 */ Drive.prototype.loadParam = async function(file_path) { if (file_path) { var p = file_path.fullname(this.dir); var param = this.getParam(p); if (param) { this.param = param; } else { this.param = new Param(this.dir); await this.param.exec('load_config', p); this.setParam(this.param); this.param.load('load'); } } }; /** * 加载完成后执行 */ Drive.prototype.load_after = function() { var cg = this.config; this.loadParam(cg.param_path); }; /** * 验证参数 * @param {Object} query url参数 * @param {Object} body 内容参数 * @param {String} method 方法 * @return {Object} 验证结果 */ Drive.prototype.checkParam = function(query, body, method) { if (this.param) { var msg = this.param.check(query, body, method); if (msg) { var code; if (msg.indexOf("必须") !== -1 || msg.indexOf("为空") !== -1) { code = 30001; } else { code = 30002; } return $.ret.error(code, msg); } } return null; }; /** * 运行GRPC方法 * @param {Object} db 数据库管理器 * @param {String} method 方法名称 * @param {Object} query 查询条件 * @param {Object} body 增改项 * @return {Object} 返回执行结果 */ Drive.prototype.run = async function(db, method, query, body) { var func = this.methods[method]; var ret = {}; try { if (func) { ret = this.checkParam(query, body, method); if (!ret) { ret = await func(db, query, body); } } else { ret = { error: { code: 60000, message: "方法名称不存在", data: Object.keys(this.methods) } } } } catch (err) { $.log.error("运行RPC方法错误!", method, err); ret = { error: { code: 500, message: "服务端业务逻辑错误" } } } return ret; }; /* 导出驱动 */ module.exports = Drive;