node koa 连接mysql

2022/9/13 2:25:43

本文主要是介绍node koa 连接mysql,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Node Koa 连接Mysql 简单案例

基础代码

基础代码
const Koa = require('koa')
const Router = require('koa-router')

// 实例
const app = new Koa()
const router = new Router()

// 服务
/*路由接口*/
// 可以使用链式调用
router
  .get('/', async ctx => {
    ctx.status = 200 //状态码
    ctx.body = 'Hello'
  })
  .get('/cxk', async ctx => {
    ctx.status = 200 //状态码
    ctx.body = 'Hello cxk'
  })
//.push(...)
//.delete(...)
//....

/*配置路由*/
app.use(router.routes()).use(router.allowedMethods())

// 监听服务端口
app.listen(3000, () => {
  console.log('http://localhost:3000')
})


需要增加的依赖: npm i mysql koa2-cors koa-bodyparser -s

名称 作用
mysql 连接mysql中间件
koa2-cors koa--跨域
koa-bodyparser koa--获取接口body请求参数

新建文件bd.js

///bd.js
const mysql = require('mysql')

// 数据库
const poolSql = mysql.createPool({
  host: 'localhost', //url
  port: 3306, //端口
  user: 'root', //库名称
  password: '123456', //数据库密码
  database: 'sys', //表名称
})

// 查询
function query(sql, value = []) {
  return new Promise((resolve, reject) => {
    poolSql.query(sql, value, (error, result) => {
      error && reject(error) //有错误信息时reject
      resolve(result) //抛出查询结果
    })
  })
}
module.exports = query

表结构

image

最终代码

const Koa = require('koa')
const Router = require('koa-router')
const poolSql = require('./bd.js') //sql操作
const cors = require('koa2-cors') //跨域
const parser = require('koa-bodyparser') //获取接口参数

// 实例
const app = new Koa()
const router = new Router()

/*路由接口*/
// 可以使用链式调用
router
  .get('/', async ctx => {
    ctx.status = 200 //状态码
    ctx.body = '<h1>Hello</h1>'
  })
  // 查询
  .get('/user', async ctx => {
    ctx.status = 200 //状态码
    let body = { code: '0', data: null, message: 'ok' }
    try {
      let _sql = 'SELECT * FROM sys_user'
      let data = await poolSql(_sql)
      body.data = data
    } catch (error) {
      body.message = error
      body.code = '1'
    } finally {
      ctx.body = body
    }
  })
  // 添加
  .post('/add', async ctx => {
    let body = { code: '0', data: null, message: 'ok' }
    ctx.status = 200 //状态码
    let _info = ctx.request.body ?? {} //获取参数
    if (!_info.name) {
      body.message = '用户名不能为空'
      body.data = null
      ctx.body = body
      return
    }
    try {
      let _sql = 'INSERT INTO sys_user (name,password) VALUES (?,?)'
      let value = [_info.name, _info.password ?? ''] //数组元素会替换对应的问号
      let data = await poolSql(_sql, value)
      body.data = data
    } catch (error) {
      if (error?.errno == '1062') {
        body.message = '用户名已存在'
      } else {
        body.message = error
      }
      body.code = '1'
    } finally {
      ctx.body = body
    }
  })
  // 更新
  .put('/put', async ctx => {
    let body = { code: '0', data: null, message: 'ok' }
    ctx.status = 200 //状态码
    let _info = ctx.request.body ?? {} //获取参数
    if (!_info.name) {
      body.message = '用户名不能为空'
      ctx.body = body
      return
    }
    if (!_info.id) {
      body.message = '用户id不能为空'
      ctx.body = body
      return
    }
    if (!Number(_info.id)) {
      body.message = 'id格式不正确'
      ctx.body = body
      return
    }
    try {
      let _sql = 'UPDATE sys_user SET name=? WHERE id=?'
      let value = [_info.name, Number(_info.id)] //数组元素会替换对应的问号
      let data = await poolSql(_sql, value)
      body.data = data
    } catch (error) {
      body.message = error
      body.code = '1'
    } finally {
      ctx.body = body
    }
  })
  // 删除
  .delete('/delete/:id', async ctx => {
    let body = { code: '0', data: null, message: 'ok' }
    ctx.status = 200 //状态码
    let _info = ctx.params ?? {} //获取参数
    if (!Number(_info.id)) {
      body.message = 'id格式不正确'
      ctx.body = body
      return
    }
    try {
      let _sql = 'DELETE FROM sys_user WHERE id=?'
      let value = [Number(_info.id)]
      let data = await poolSql(_sql, value)
      body.data = data
    } catch (error) {
      body.message = '删除失败'
      body.code = '1'
    } finally {
      ctx.body = body
    }
  })

// 添加接口固定前缀
router.use('/api', router.routes())
// .use('/pc', pcRouter.routes())
// .use('/android', androidRouter.routes())

app
  .use(cors() /*跨域 */)
  .use(parser() /*获取接口参数 */)
  .use(router.routes() /*配置路由*/)
  .use(router.allowedMethods() /*配置路由*/)

// 服务端口
app.listen(3000, () => {
  console.log('http://localhost:3000')
})


这篇关于node koa 连接mysql的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程