xc.base v1.9.3
xc.base
base framework of our egg
QuickStart
egg-bin init 项目名 --type-simple之后
将package.json egg对象下面 里面增加一行: egg: { framework:'xc.base' } 然后使用yarn add xc.base初始化项目
初次初始化请将config/plugin.js 里面增加一行 mysql : { enable : false }
然后使用 $yarn init-config 指令初始化项目配置文件 该指令默认会将mysql插件打开,如果不需要使用mysql插件则,将plugin.js里面的enable置为false mysql : { enable: false, package: 'egg-mysql' }
##API ###BaseController
//简化helper获取方式由this.ctx.helper 简化为this.helper
get helper()
// 错误统一处理 status 为200 http返回
// {
// code: 500,
// message: err.message,
// }
error(err)
//content为错误内容可为object status为200 http返回
// {
// code: 500,
// message: err.message,
// content
// }
errorContent(err, content)
// 成功统一处理 如果data为null则统一处理为执行失败错误
// {
// code: 0,
// message: 'success',
// content: data,
// }
success(data)
//统一成功和失败错误处理
//如果asycnfunction 抛出错误则执行失败处理
async result(asyncFunction)
//统一处理 http参数验证及错误处理
//info验证泛型,body为验证目标对象
//body如果为undefined 默认验证request.body
//如果验证成功返回 true
//如果验证失败返回 false 并统一按照errorContent处理错误
validate(info, body)
###DbController DbService DbController 继承自BaseController
//获取helper里面的数据库对象 简化db的获取为this.db
get db()
//直接执行sql语句 框架统一处理错误,无错误抛出
async doQuery(_sql)
//直接用db1执行sql 如果查不到就返回null,查到直接返回对象
async doQueryObj(_sql)
//直接执行sql语句 有错误抛出
async doQueryError(_sql)
/**
* 执行插入操作并自动插入创建时间,最后更新时间
* 需要表中有create_at(varchar(13))、update_at(varchar(13))字段
* @param {string} _sql 插入sql语句
*/
async doInsert(_sql)
/**
* 执行查询并自动增加create_time,update_time字段格式为YYYY-MMM-DD HH:mm:ss
* 需要表中有create_at(varchar(13))、update_at(varchar(13))字段
* @param {string} _sql 查询sql语句
*/
async doList(_sql)
/**
* 执行更新操作并自动将update_at字段更新为当前时间
* 需要表中有update_at(varchar(13))字段
* @param {string} _sql 更新sql语句
*/
async doUpdate(_sql)
/**
* 执行更新is_delete=1操作并自动将update_at字段更新为当前时间
* @param {string} _sql 更新is_delete sql语句
*/
async doDel(_sql)
//执行事务
async tran(asyncFunction)
//事务回调里面直接执行sql语句
async doQueryConn(conn,_sql)
//事务回调里面直接执行sql语句 如果查不到就返回null,查到直接返回对象
async doQueryConnObj(conn,_sql)
//多数据源执行sql语句
async doMQuery(dbId,_sql)
//多数据源执行事务
async tranM(dbId,asyncFunction)
//统一防sql注入处理,sql语句里面的参数用this.to()包裹
to(params)
###helper
//数据库操作相关 已集成到DbService和DbController 如果需要自行实现见源码
helper.db
//时间操作相关
helper.time
// 获取当前时间格式 YYYY-MM-DD HH:mm:ss.SSS
helper.time.getCurrentTime()
report中间件 reportEnd中间件
统一为http请求加上唯一requestId 追加到 httpQuery 统一打印 http请求入参 统一打印 http执行耗时及结束标志
###config
// mysql 数据库配置
const mysqlCon = {
clients: {
// clientId, 获取client实例,需要通过 app.mysql.get('clientId') 获取
db1: {
// 数据库名默认
database: 'xc_main',
},
db2: {
// 数据库名
database: 'xc_app',
},
// ...
},
// 所有数据库配置的默认值
default: {
// host
host: '',
// 端口号
port: '',
// 用户名
user: '',
// 密码
password: '',
},
// 是否加载到 app 上,默认开启
app: true,
// 是否加载到 agent 上,默认关闭
agent: false,
};
##Example ###BaseController
'use strict';
const Controller = require('xc.base').BaseController;
class TemplateController extends Controller {
async create() {
if (!this.validate({
name: { type: 'string' },
userid: { type: 'string' },
})) return;
const { ctx, service } = this;
//注意 result 里面没有 await
await this.result(service.template.create(ctx.request.body));
}
async list() {
await this.success(await this.service.template.list());
}
}
module.exports = TemplateController;
###DbService
'use strict';
const Service = require('xc.base').DbService;
class TemplateService extends Service {
async create(info) {
return await this.doQueryError(
`insert into xc_p_template(name,createtime,updatetime,createuser,updateuser) values(
${this.to(info.name)},${this.to(this.helper.time.getCurrentTime())},${this.to(this.helper.time.getCurrentTime())}
,${this.to(info.userid)},${this.to(info.userid)})`
);
}
async list() {
return await this.doQuery('select * from xc_p_template');
}
async getSowingsTran(dateTime) {
return await this.tran( async conn => {
const _sql1 = `update xc_config_sowing set title = ${this.to(dateTime)} where id = 39`;
await this.doQueryConn(conn, this_sql1);
const _sql2 = 'select * from xc_config_sowing where id = 39';
const result = await this.doQueryConn(conn, _sql2);
this.logger.info(`dateTime=${dateTime}`);
this.logger.info(`result=${JSON.stringify(result)}`);
return result;
});
}
}
module.exports = TemplateService;
###config
//覆盖写出字段名 保留未写出字段
exports.mysql = {
clients: {
db1: {
database: 'aaa',
},
},
};
命令行工具
1. 生成模块
指令:yarn api-init 模块 模块名称 [表名称] [数据库]
1.模块
2.模块名称
3.[表名称]可选 如果不传,初始化空的controller.js和service.js
4.[数据库]可选 默认db1
eg: yarn api-init room 房间 jg_room db1
2. 生成模块下的上下文
指令:yarn api-ctx 模块 上下文根 [表名称] [数据库]
1.模块
2.上下文根
3.[表名称]可选 如果不传,初始化空的controller.js和service.js
4.[数据库]可选 默认db1
eg: yarn api-init room 房间 jg_room db1
3. 生成api
指令:yarn api 模块 上下文根 方法名
1.模块
2.上下文根
3.方法名
eg: yarn api room room getByBimId
1) 在 api/模块/.init/.init.json中,ctxs下面的上下文根对象的apis (eg: [/api/room/.init/.init.json].ctxs.room.apis )数组添加
{
"fun": "getByBimId",
"method": "DELETE",
"url": "/bimc/v1.0.0/room/getByBimId/:bim_id",
"name": "根据bimid查询房间"
}
2) 运行指令
4. 生成api/ apidoc文档
默认在app/public/doc/api/下生成静态资源
指令:yarn doc-api
5. 生成app/ apidoc文档
默认在app/public/doc/app/下生成静态资源
指令:yarn doc-app
6. 生成config/config.default.js 及 config/plugin.js 模板文件(可选)
注:该命令会覆盖当前 config/config.default.js 及 config/plugin.js
建议用于项目初始化
指令:yarn init-config
如果项目工程不需要使用数据库 更改config/plugin.js
mysql : {
enable: false,
package: 'egg-mysql'
}
Questions & Suggestions
Please open an issue here.
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago