。智能获取方法GET 每个表都自动有的 (主要作用是将获取数据的许多设置交给前端 减少接口修改次数)
。前端应了解只获取需要的最少字段 可以减少传输 一般是不获取所有字段的
。前端应了解无必要不要修改WHERE条件的顺序 因为字段顺序不一致不会用到数据库索引
。如果需要修改where字段顺序 访问量又会比较大的应知会后端优化性能(虽然有监控数据 但是思维要跟上)
。但是如果接口定死了 特别是新业务需求变动太频繁会造成接口修改次数过多 工作量过大
。所以才有这样的设置将获取的字段数 排序及行数决定权都交给前端
。GET 用于重写(比如增加权限)
get(): Promise {
return this._get();
}
。_get 具体实现 可输入参数
_get(where?: string, colp?: string[]): Promise {
const self = this;
//colp = colp || this.cols;
where = where || "";
const up = self.up;
return new Promise(async (resolve, reject) => {
try {
await this._upcheck();
} catch (e) {
reject(e);
return;
}
colp = colp || up.cols;//修改列
if (where == "" && up.pars.length >= 1) {
for (var i = 0; i < up.pars.length; i++) {
where += " and " + colp[i] + "=?";
}
}
var sb = 'SELECT ' + colp.join(",") + ",id,upby,uptime FROM " + self.tbname
+ " WHERE " + self.uidcid + '=? ' + where;
if (self.haveoldid)
sb += " and oldid is null";
if (up.order !== "idpk")
sb += ' order by ' + up.order;
sb += ' limit ' + up.getstart + ',' + up.getnumber;
var values = [up[self.uidcid]];
if (where !== '')
values = values.concat(up.pars);
let tb = await self.mysql1.doGet(sb, values, up);
resolve(tb);
});
}
后端用法:
。重写增加权限
//查询
get(): Promise {
const self = this;
const up = self.up;
return new Promise(async (resolve, reject) => {
try {
await this._upcheck();
} catch (e) {
reject(e);
return;
}
let power = await self._vidateforuid(self.tbname + "_get");
//await self._addWarn(JSON.stringify(power), "sys_sql", "services", "services_dinpay");
if (power["code"] != 200) {
resolve(power["errmsg"]);
return;
}
let back = await self._get();
resolve(back);
});
}
。重写增加条件
。以后联表查询的应该也写成这样的接口 方便前端
前端用法(主要是将获取数据的许多设置交给前端 减少接口修改次数):
。例如表景区基本表有字段place kind viewname
。自定义获取的字段 ex:只获取地点和景区名 up.cols=[place, viewname]
。自定义获取的条件(必须是按顺序)
。。例如按地点和类别查找 up.pars=[广州,测试类别]
就会转换为where uidcid=? and place=? and kind=?
。。例如按地点查找up.pars=[广州]
就会转换为where uidcid=? and place=?
。。如果按类别 地点查找 up.cols=[kind,viewname,place](总之把你要的条件放到最前面来)
up.pars=[测试类别]就会转换为where uidcid=? and kind=?
。自定义排序字段up.order=viewname
。自定义获取的行数或分页up.getstart=1 up.getnumber=10即1~10行 翻页即up.getstart+=up.getnumber 注意up.getnumber不变