koa搭建接口服务

1.项目规划图node

 2.路由器代码mysql

const Router = require('koa-router')

const router = new Router({
  prefix: '/api'
})
const allRouter = new Router()
const gameRouter = new Router()

// 处理模块
const gameClick = require('../middleware/game')
const demoClick = require('../middleware/demo')


//指定路由,从上到下识别
//localhost:3000/api/game/test
gameRouter
  .get('/test', gameClick.test_get)
  .post('/test', gameClick.test_post)
  .put('/test/:id', gameClick.test_put)
  .del('/test/:id', gameClick.test_delete)

// 全局路由
allRouter
  .get('*', demoClick.getAll)
  .post('*', demoClick.postAll)
  .put('*', demoClick.postAll)
  .del('*', demoClick.postAll)

router.use('/game', gameRouter.routes(), gameRouter.allowedMethods())
router.use('*', allRouter.routes(), allRouter.allowedMethods())

module.exports = router.routes()

  

3.中间层代码ios

const gameAxios = require('../controllers/game')
const CommonSend = require('../api/send')
const {
  query
} = require('../api/sqlServer.js')

// 中间模块
class CommonClick {

  // 测试列表
  static async test_get(ctx) {
    let data = {
      page: ctx.query.page || 1
    }
    await gameAxios.test_get(data).then((res) => {
      ctx.body = CommonSend.list(res)
    }).catch((err) => {
      ctx.body = CommonSend.err('操做失败')
    })
  }

  // 添加测试
  static async test_post(ctx) {
    let name = ctx.request.body.name || ''
    let password = ctx.request.body.password || ''
    let data = {
      name: name,
      password: password
    }
    await gameAxios.test_post(data).then((res) => {
      ctx.body = CommonSend.success('操做成功')
    }).catch((err) => {
      ctx.body = CommonSend.err('操做失败')
    })
  }

  // 修改测试
  static async test_put(ctx) {
    let password = ctx.request.body.password
    let id = ctx.request.url.split('/')[4]
    let data = {
      id: id,
      password: password
    }
    await gameAxios.test_put(data).then((res) => {
      ctx.body = CommonSend.success(res)
    }).catch((err) => {
      ctx.body = CommonSend.err('操做失败')
    })
  }

  // 删除测试
  static async test_delete(ctx) {
    let id = ctx.request.url.split('/')[4]
    if (id !== 'undefind') {
      await gameAxios.test_delete(id).then((res) => {
        ctx.body = send.success(res)
      }).catch((err) => {
        ctx.body = send.err('操做失败')
      })
    }

  }

}

module.exports = CommonClick

  

4.控制器代码sql

const sql = require('../api/common.js')

// 公共模块
class CommonCtrl {
  // 测试列表
  static test_get(data) {
    let page = data.page
    return sql.select('name', '*', '', page)

  }

  // 添加测试
  static test_post(data) {
    return sql.insert('name', data)
  }

  // 修改测试
  static test_put(data, id) {
    return sql.update('name', data, id)
  }

  // 删除测试
  static test_delete(id) {
    return sql.deletes('name', id)
  }

}

module.exports = CommonCtrl

  

5.链接数据库数据库

const mysql = require('mysql')

let apiStatus = false //true为本地数据库,false为阿里云数据库

let pool

if (apiStatus) {
  pool = mysql.createPool({
    host: 'localhost', // 数据库地址
    user: 'root', // 数据库用户
    password: 'root', // 数据库密码
    database: 'node_api' // 选中数据库
  })
}

const query = function (sql, values) {
  return new Promise((resolve, reject) => {

    pool.getConnection(function (err, connection) {
      if (err) {
        reject(err)
      } else {
        connection.query(sql, values, (err, rows) => {
          if (err) {
            reject(err)
          } else {
            resolve(rows)
          }
          connection.release()
        })
      }
    })
  })
}

module.exports = {
  query
}

  

6.封装增删改查api

const {
  query
} = require('./sqlServer')

let $sql

// 公共模块
class CommonSql {

  //添加
  static insert($table, array, props) {
    let keys = '',
      values = ''
    for (let key in array) {
      keys += ',' + key
      values += ',' + array[key]
    }
    let $keys = keys.substr(1)
    let $values = values.substr(1)
    $sql = `insert into ${$table}(${$keys}) values(${$values})`;
    return query($sql)
  }

  //获取
  static async select($table, $what, array, $page) {
    let keys = ''
    for (let key in array) {
      keys += ' and ' + key + '=' + array[key]
    }
    let $keys = keys.substr(5)

    let pageNum = 20
    let startNum = ($page - 1) * pageNum
    let endNum = $page * pageNum

    if (array) {
      $sql = `select sql_calc_found_rows ${$what} from ${$table} where ${$keys} ORDER BY id desc LIMIT ${startNum},${endNum}`
    } else {
      $sql = `select sql_calc_found_rows ${$what} from ${$table} ORDER BY id desc LIMIT ${startNum},${endNum}`;
    }

    let list = await query($sql)
    let number = await query(`SELECT FOUND_ROWS() as total;`)
    let date = {
      data: list,
      meta: {
        pagination: {
          total: number[0].total,
          page_count: 20,
          per_page: Math.ceil(number[0].total / 20),
          current_page: parseInt($page)
        }
      }
    }

    return date


  }

  //修改
  static update($table, array, $id) {
    let keys = ''
    for (let key in array) {
      keys += ',' + key + '=' + array[key]
    }
    let $keys = keys.substr(1)
    $sql = `update ${$table} set ${$keys} where id = ${$id}`
    return query($sql)
  }

  //删除
  static deletes($table, $id) {
    $sql = `delete  from ${$table} where id =  ${$id}`
    return query($sql)
  }

}

module.exports = CommonSql
相关文章
相关标签/搜索