使用koa,knex操作数据库
发布: 2018-06-10 10:23:36标签: nodeJs
使用koa,knex操作数据库
重新整理了一下增删改查的方法,中间没有做任何安全判断,但是个人使用感觉很方便
01/**02 * mysql helper03 * author: luzhongk@126.com04 */0506const db = require('../utils/mysql.js') // knex07const moment = require('moment')0809function formatData(data = []) {10 const FORMAT = 'YYYY-MM-DD HH:mm:ss'11 data.forEach(item => {12 if (item.create_time) {13 item.create_time = moment(item.create_time).format(FORMAT)14 }15 if (item.update_time) {16 item.update_time = moment(item.update_time).format(FORMAT)17 }18 })19 return data20}2122/**23 * 分页查询24 * @param ctx (koa ctx对象)25 * @param dbName (数据库名字)26 * @param condition (查询条件)27 * @returns {Promise<Object>}28 */29const list = async (ctx, dbName, condition = {}) => {30 let { page = 1, size = 1000 } = ctx.query31 if (page < 1) page = 132 const getContent = db(dbName)33 .select()34 .limit(size)35 .offset((page - 1) * size)36 .where(condition)37 .orderBy('create_time', 'desc')38 const getTotal = db(dbName).where(condition).count('id as total')39 const [content, total] = await Promise.all([getContent, getTotal])4041 const data = { content: formatData(content), total: total.length ? total[0].total : 0 }42 ctx.state.data = data43 return data44}4546/**47 * 添加数据48 * @param ctx49 * @param dbName (数据库成功)50 * @param body (插入内容,或者使用发送的body)51 * @returns {Promise<Number>} (id)52 */53const add = async (ctx, dbName, body) => {54 const data = await db(dbName).insert(body || ctx.request.body)55 ctx.state.data = data56 return data57}5859/**60 * 更新数据61 * @param ctx62 * @param dbName63 * @param body (插入内容,或者使用发送的body)64 * @returns {Promise<null Number>}65 */66const update = async (ctx, dbName, body) => {67 const data = body || ctx.request.body68 const { id } = data69 if (!id) ctx.throw(400, 'id not found')70 delete data.id71 const res = await db(dbName).update(data).where({ id })72 ctx.state.data = res73 return res74}7576/**77 * 删除数据78 * @param ctx79 * @param dbName80 * @param removeId81 * @returns {Promise<*>}82 */83const remove = async (ctx, dbName, removeId) => {84 const { id } = {removeId} || ctx.params || ctx.query85 if (!id) ctx.throw(400, 'id not found')86 if (id === 'all') {87 const data = await db(dbName).truncate() // 清空表88 ctx.state.data = '成功'89 return data90 } else {91 const data = await db(dbName).where('id', id).del()92 ctx.state.data = data93 return data94 }95}9697module.exports = {98 list,99 add,100 update,101 remove102}103
复制代码使用
在koa实例对象app中注入
01// 注入工具类02app.context.dbHelper = dbHelper
复制代码使用demo
01/**02 * 临时日志03 */0405const dbName = 'kuan_logger';0607module.exports = {08 async list(ctx) {09 await ctx.dbHelper.list(ctx, dbName);10 },11 async remove(ctx) {12 await ctx.dbHelper.remove(ctx, dbName);13 },14 async add(ctx) {15 await ctx.dbHelper.add(ctx, dbName);16 }17};
复制代码