Commit 92f09c16 authored by zhouzihao's avatar zhouzihao

dev-添加分页查询的特性

parent 554510d5
Pipeline #109 canceled with stages
......@@ -19,9 +19,7 @@ module.exports = {
// 获取全部列表
getList: helper.listAllBuilder('project', '*', {}),
// 获取分页列表
getPagedList: (req, res) => {
//
},
getPagedList: helper.pagedBuilder('project', 'p_id', {}),
//新建更新数据
saveProject: helper.saveBuilder('project', 'p_id'),
};
\ No newline at end of file
......@@ -26,5 +26,6 @@ app.post("/env/", envApi.saveEnv);
app.post("/project/", projectApi.saveProject);
app.get("/project/", projectApi.getList);
app.get("/project/len", projectApi.getCount);
app.get("/project/page",projectApi.getPagedList);
module.exports = app;
\ No newline at end of file
......@@ -43,8 +43,9 @@ var saveJsonToDb = (json, table, key) => {
* @param {*} json 查询条件
* @param {*} table 数据表名称
* @param {*} items 要查询的字段
* @param {Object} extra 额外值
*/
var listDbByJson = (json, table, items) => {
var listDbByJson = (json, table, items, extra = {}) => {
return new Promise((resovle, reject) => {
var query = {};
//整理字段
......@@ -63,13 +64,15 @@ var listDbByJson = (json, table, items) => {
var citems = Object.assign({}, items);
query = _.merge(query, citems);
}
//添加额外查询条件 比如order by等
var extraClone = Object.assign({}, extra);
query = _.merge(query, extraClone);
var cloned = Object.assign({}, json);
query['$where'] = cloned;
query['$from'] = table;
var sql = db.sql.$select(query);
var sql = db.sql.$select(query);
db.query(sql.sql, sql.values)
.then((rows) => {
resovle(rows);
......@@ -79,7 +82,75 @@ var listDbByJson = (json, table, items) => {
});
}
/**
* 根据条件获取数据长度
* @param {*} json
* @param {*} table
* @param {*} key
*/
var countByJson = (json, table, key) => {
return new Promise((resovle, reject) => {
listDbByJson(json, table, { len: { $count: key } })
.then((res) => {
if (_.isEmpty(res)) {
resovle(0)
}
resovle(res[0]['len']);
}).catch((err) => {
reject(JSON.stringify(err));
});
});
}
/**
* 获取分页数据
* @param {*} json 查询条件
* @param {*} table
* @param {*} items
* @param {*} key
* @param {*} page
* @param {*} pageSize
*/
var pagedDbByJson = (json, table, items, key, page = 1, pageSize = 10) => {
return new Promise((resovle, reject) => {
countByJson(json, table, key)
.then((len) => {
if (len > 0) {
return listDbByJson(json, table, items, {
$limit: pageSize,
$offset: (page - 1) * pageSize
}).then((data) => {
resovle({
data,
paged: {
page,
pageSize,
total: len
}
});
}).catch((err) => {
throw new Error(err);
})
} else {
resovle({
data: [],
paged: {
page,
pageSize,
total: 0
}
});
}
}).catch((err) => {
reject(JSON.stringify(err));
})
});
}
module.exports = {
saveJsonToDb,
listDbByJson,
countByJson,
pagedDbByJson,
}
\ No newline at end of file
......@@ -42,7 +42,29 @@ var listAllBuilder = (table, items, condition, translate = (x) => { return x })
};
}
/**
* 分页查询构建器
* @param {*} table
* @param {*} key
* @param {*} items
*/
var pagedBuilder = (table, key, items) => {
return (req, res) => {
var page = _.toInteger(_.get(req.query, 'page', 1));
var pageSize = _.toInteger(_.get(req.query, 'pageSize', 10));
_.unset(req.query, 'page');
_.unset(req.query, 'pageSize');
databaseHelper.pagedDbByJson(req.query, table, items, key, page, pageSize)
.then((data) => {
res.end(JSON.stringify(data));
}).catch((err) => {
res.end(JSON.stringify(err));
})
};
}
module.exports = {
saveBuilder,
listAllBuilder,
pagedBuilder,
};
\ 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