koa2实现对mysql的增删改查函数封装

---恢复内容开始---

nodejs实现对mysql简单的增删改查操作

最近在看mysql的视频,所以手写了这么个东西,欢迎大家指点指点  

// 项目开始先造一个简单的node服务器server.js:
const Koa = require('koa'); const Path = require('path'); const Static = require('koa-static'); const KoaBody = require('koa-body')(); const Route = require('./router/router'); const App = new Koa();
// const main
= Static(Path.join(__dirname)); App.use(main);

// 处理post请求需要用这个 App.use(KoaBody);
// 使用路由 App .use(Route.routes()) .use(Route.allowedMethods()); App.listen(
3666, (err) => { if(err) { throw err; } console.log('server listen 3666'); });


// 接下来进行对路由的配置router.js:

const Router = require('koa-router');

const Route = new Router();

// 从processData.js中引入这四个方法

const {
  wantAddData,  // 添加数据
  wantDeleData,  // 删除数据
  wantExitData,  // 修改数据
  wantFindData   // 查找数据
} = require('../processData/processData');

 
  

Route.post('/add',wantAddData);
Route.get('/getShopMsg', wantFindData);
Route.post('/exitShopMsg', wantExitData);
Route.get('/delete', wantDeleData);

module.exports = Route;

// 这样一个简单版的node服务器就架好了

// 接下来就是连接上本地的mysql数据库了

// 创建mysql.js

const Mysql = require('mysql');
const { _SQLCONFIG } = require('../config');

// _SQLCONFIG 保存你的mysql信息,结构如下:

/**

_SQLCONFIG: {
  host: 'localhost',  
  user: 'root',      
  port: '3306',       
  database: '',       
  password: '',    
  connectionLimit: 50 // 最大连接数
}

*/

// 创建数据库连接
const pool = Mysql.createPool(_SQLCONFIG);

// 通过connection的query方法统一执行增删改查的操作。

// connecQuery为增删改查方法的函数名

// statements进行增删改查操作的条件,查询条件都由前端访问时将条件传入

// parameter 进行添加或修改的数据
function poolFn(connecQuery, statements, parameter) {
  // getConnection 创建连接池
  return new Promise((resolve, reject) => {
    pool.getConnection((err, connection) => {
      if(err) {
        throw err;
        reject('建立连接池失败');
        return;
      }

      connecQuery(connection, statements, parameter).then(data => {

        connection.release(); // 到这步说明已经完成操作,释放连接
        resolve(data);
      });
    });
  // console.log(pool._allConnections.length); // 连接池里的连接数
  });
}
/*
* connection 连接句柄
* statements 查询语句

* */

// 基于promise方法实现

// 查询数据
function connecQueryFind(connection, statements) {
  return new Promise((resolve, reject) => {
    connection.query(statements, (err, result) => {
      if(err) {
        throw err;
        reject('查询失败');
      }
      resolve(result);
    });
  })
}

// 添加数据
function connecQueryAdd(connection, statements, parameter) {
  return new Promise((resolve, reject) => {
    connection.query(statements, parameter, (err, result) => {
      if(err) {
        throw err;
        reject('添加失败');
      }
      resolve(result);
    });
  })
}

// 删除数据
function connecQueryDele(connection, statements) {
   return new Promise((resolve, reject) => {
    connection.query(statements, (err, result) => {
      if(err) {
        throw err;
        reject('删除失败');
      }
      resolve(result);
    });
  })
}

// 修改数据
function connecQueryExit(connection, statements, parameter) {
  return new Promise((resolve, reject) => {
    connection.query(statements, parameter, (err, result) => {
      if(err) {
        throw err;
        reject('修改失败');
      }
      resolve(result);
    });
  })
}

// 将方法封装统一导出

function queryFn(connecQuery, statements, parameter) {
  return new Promise((resolve) => {
    poolFn(connecQuery, statements, parameter).then(data => {
      resolve(data);
    });
  });
}

module.exports = {
  findData(statements, parameter) {
    return queryFn(connecQueryFind, statements, parameter);
  },
  addData(statements, parameter) {
    return queryFn(connecQueryAdd, statements, parameter);
  },
  deleData(statements, parameter) {
    return queryFn(connecQueryDele, statements, parameter);
  },
  exitData(statements, parameter) {
    return queryFn(connecQueryExit, statements, parameter);
  }
};

// 最后就是对mysql中四个方法在路由中的处理了processData.js:

// 从mysql.js引入增删改查方法

const {
  findData,
  addData,
  deleData,
  exitData
} = require('../mysql/mysql');

// ------------------ctx.query获取get请求参数--------------------------------------
// ------------------ctx.request.body获取post请求参数------------------------------
// let data = fs.readFileSync('./k_Mongo/shopList.json', 'utf-8'); 读取文件信息

// 这边通过async方法保证数据的同步获取

let wantFindData = async(ctx) => { // 获取数据
  let res = ctx.query;

  // 返回的数据格式为json
  ctx.response.type = 'json';
  let statements = res.statements;
  await findData(statements).then(data => {
    ctx.body = data;
  }, () => {
    ctx.body = { err: '数据获取失败' };
  });
};

let wantAddData = async(ctx) => { // 添加数据
  let res = ctx.request.body;
  let statements = res.statements;
  let parameter = JSON.parse(res.parameter);
  ctx.response.type = 'json';
  await addData(statements, parameter).then(data => {
    ctx.body = data;
   }, () => {
    ctx.body = { err: '数据添加失败' };
  });
};

let wantDeleData = async(ctx) => { // 删除数据
  let res = ctx.query;
  let statements = res.statements;
  ctx.response.type = 'json';
  await deleData(statements).then(data => {
    ctx.body = data;
  }, () => {
    ctx.body = { err: '数据删除失败' };
  });
};

let wantExitData = async(ctx) => { // 修改数据
  let res = ctx.request.body;
  let parameter = JSON.parse(res.parameter);
  let statements = res.statements;
  ctx.response.type = 'json';
  await exitData(statements, parameter).then(data => {
    ctx.body = data;
  }, () => {
    ctx.body = { err: '数据修改失败' };
  });
};

module.exports = {
  wantFindData,
  wantAddData,
  wantDeleData,
  wantExitData
};

// 到这一步基本上结束了,可以在前端使用试验一下

// 先自己封装一个axios的方法,结合上次讲的axios封装get和post方法 fetch.js:

const axios = require('axios');

//封装axios请求,get和post
export default function(url, method, params = {}) {
  let data = method.toLocaleLowerCase() === 'get' ? 'params' : 'data';
  return axios({
    method,
    url,
    [data]: params
  }).then((res) => {
    return Promise.resolve(res.data);
  }).catch((err) => {
    return Promise.reject(err);
  })
}

// 再新建一个api.js文件专门存放接口查询

// 这边就只使用添加数据和获取数据

import fetch from './fetch';

// 添加商品数据
export function addShopData(params) {
  return new Promise((resolve, reject) => {
    fetch('/add', 'post', params).then(data => {
      resolve(data);
    }, err => {
      reject(err);
    })
  });
}

// 获取商品列表数据
export function getShopData(params) {
  return new Promise((resolve, reject) => {
    fetch('/getShopMsg', 'get', params).then(data => {
      resolve(data);
    }, err => {
      reject(err);
    })
  });
}

// 修改商品列表数据
export function exitShopData(params) {
  return new Promise((resolve, reject) => {
    fetch('/exitShopMsg', 'post', params).then(data => {
      resolve(data);
    }, err => {
      reject(err);
    })
  });
}

// 最后一步了

// React先创建shopList.js

import React, { Component } from 'react';
import { getShopData } from '../../../api/shopApi';
import SingShop from './singShop';
import CompontHead from '../homeComHead/compontHead';

import './shoplist.scss';

export default class HomeShopList extends Component {
  constructor(props) {
    super(props);

    // 商品数据
    this.state = {
      shopData: [],
      shopData02: []
    };

  // this.conUl = React.createRef();

  // 查询条件

  // 查询shopMsg表的所有数据
  this.getParams = {
    statements: 'SELECT * FROM shopMsg'
  };

  // 这是修改的数据
  // let DATA = [{"detImg":"/static/images/all/1495869803526192.jpg"}];

  // 修改的参数
  // this.exitParams = {
  //    statements: 'UPDATE shopMsg SET product_det=? WHERE product_id="KY_13141544361478180"',  // 修改条件
  //    parameter: [JSON.stringify(DATA)]     // 修改的数据
  // };
  // product_genre product_det
  
  }
  componentWillMount() {

    // 进行查询操作
    getShopData(this.getParams).then(data => {
      data.map(item => {
        item.product_genre = JSON.parse(item.product_genre);
        item.product_det = JSON.parse(item.product_det);
      });
       data.length = 8;
       let shopData02 = JSON.parse(JSON.stringify(data));
      this.setState({
       shopData: data,
       shopData02: shopData02.splice(2, data.length)
      }); 

      console.log(data);
    });
  // exitShopData(this.exitParams).then(data => {
    // console.log(data);
  // });
  }
 
  render() {
    return (
      <div>hehe</div>
    )
  }
}

// 这是查询出来的数据:

// 这是我数据库里的product_id='KY_13141544361478180'的数据,对应上面查到的第一条数据

// 添加数据就不展示了,因为这里面的数据都是我添加进去的 

// 本文只是实现了基本的mysql增删改查,对于mysql更深层的操作目前还没达到那个境界,以后还需更加努力!文笔不好,谢谢阅读,希望对你有所帮助。

猜你喜欢

转载自www.cnblogs.com/kyl-6/p/10161427.html