koa2 mysql增删改查_koa2实现对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= newKoa();
//
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) {throwerr;
}
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 (
)
}
}
// 这是查询出来的数据:
// 这是我数据库里的product_id='KY_13141544361478180'的数据,对应上面查到的第一条数据
// 添加数据就不展示了,因为这里面的数据都是我添加进去的
// 本文只是实现了基本的mysql增删改查,对于mysql更深层的操作目前还没达到那个境界,以后还需更加努力!文笔不好,谢谢阅读,希望对你有所帮助。
koa2 mysql增删改查_koa2实现对mysql的增删改查函数封装相关推荐
- 学会对mysql的增删改查_Go实现对MySQL的增删改查
开发环境:windows7 64位.编辑器是sublime text3. 直接添上代码了,代码中有注释. 注:需要提前下载github.com/go-sql-driver/mysql,下面的程序才会运 ...
- java mysql 行锁_Java如何实现对Mysql数据库的行锁?
行锁 mysql实现行级锁的两大前提就是,innodb引擎并且开启事务.由于MySQL/InnoDB的加锁分析,一般日常中使用方式为: select .... from table where ... ...
- mysql 删除数据 分页_PHP实现对mysql数据库内容分页显示
在写列表页读数据的时候往往要写上一个分页代码,小编研究了很久,也搜索了很多东西,最后总结出了以下分页代码,有需要的朋友可以研究研究 /**********分页开始**********/ $pageSi ...
- c#实现对sqlserver的增删改操做 1117
c#实现对sqlserver的增删改操做 1117 cmd对象的ExecuteNonQuery方法 ExecuteNonQuery方法 基本情况 案例 增加 修改 删除
- 超详细的hibernate实现对MySQL的CRUD
超详细的hibernate实现对MySQL的CRUD 文章目录 超详细的hibernate实现对MySQL的CRUD 前言 一.操作前的准备 1.创建maven项目 2.导入maven依赖 3.创建实 ...
- 【五一创作】使用Scala二次开发Spark3.3.0实现对MySQL的upsert操作
使用Scala二次开发Spark实现对MySQL的upsert操作 背景 在我们的数仓升级项目中,遇到了这样的场景:古人开发的任务是使用DataStage运算后,按照主键[或者多个字段拼接的唯一键]来 ...
- Go web 开发数据库管理平台,利用远程过程调用(RPC)实现对MySQL数据库的管理和使用
Go web 开发数据库管理平台,利用远程过程调用(RPC)实现对MySQL数据库的管理和使用 前言 做DBA,最基本的工作就是需要管理公司的数据库系统.工作中,常常需要维护的数据库数量是非常多的.小 ...
- maven mybatis mysql_Java Web学习系列——Maven Web项目中集成使用Spring、MyBatis实现对MySQL的数据访问...
标签: 本篇内容还是建立在上一篇Java Web学习系列--Maven Web项目中集成使用Spring基础之上,对之前的Maven Web项目进行升级改造,实现对MySQL的数据访问. 添加依赖Ja ...
- 通过servlet来实现对Mysql进行连接、插入、修改、删除操作
通过servlet来实现对Mysql进行连接.插入.修改.删除操作 来自:http://blog.sina.com.cn/s/blog_4bea2fb10100f3w3.html package Se ...
最新文章
- 激活函数之softmax介绍及C++实现
- 汇编语言第二课作业2.1
- EChart.js 简单入门
- 第4章 变量、作用域和内存问题
- NodeJS在CentOs7下安装
- python方差的代码_Python statistics pvariance()用法及代码示例
- 44000+ 人一夜之间失业
- vue-cli3的eslint配置问题
- python调整图片亮度_python 调整图片亮度的示例
- Springboot启动流程分析(四):完成启动流程
- 以太网物理层信号测试与分析
- QCC51XX---如何修改MDE的主题
- 万字长文:编写 Dockerfiles 最佳实践
- 哈哈日语 日语五十音图之ら、わ行
- JavaScript 编程精解 中文第三版 三、函数
- 面试:js 延迟加载方式
- python 绘制多个折线图,横轴显示为时间
- 学生上课睡觉班主任怎么处理_怎样解决学生上课睡觉的问题
- 微信数据库最新的解密方式,C++代码解密微信数据库信息!
- JS中遍历数组和对象的几种方法