ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

node koa 连接mysql

2022-09-10 19:01:48  阅读:221  来源: 互联网

标签:node body const koa ctx let mysql message data


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,body,const,koa,ctx,let,mysql,message,data
来源: https://www.cnblogs.com/zsyh/p/16676685.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有