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 (

hehe

)

}

}

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

e14232379da44b0e635a9b748bd25a61.png

3604a39330cfe345df933c58dacfea51.png

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是手把手带你搭建koa2 mysql项目的教程。 1. 安装Node.js和npm 首先需要安装Node.js和npm,可以在官网下载安装包进行安装。 2. 初始化项目 在命令行中进入项目目录,运行以下命令初始化项目: ``` npm init ``` 根据提示填写项目信息,完成后会生成package.json文件。 3. 安装koa2和koa-router 运行以下命令安装koa2和koa-router: ``` npm install koa koa-router --save ``` 4. 安装mysql模块 运行以下命令安装mysql模块: ``` npm install mysql --save ``` 5. 创建数据库 在mysql中创建一个名为test的数据库,并创建一个名为users的表,包含id、name、age三个字段。 6. 创建连接池 在项目中创建一个db.js文件,用于创建mysql连接池: ```javascript const mysql = require('mysql'); const pool = mysql.createPool({ host: 'localhost', user: 'root', password: '123456', database: 'test' }); module.exports = pool; ``` 7. 创建路由 在项目中创建一个router.js文件,用于创建koa-router路由: ```javascript const Router = require('koa-router'); const pool = require('./db'); const router = new Router(); router.get('/users', async (ctx) => { const conn = await pool.getConnection(); const [rows] = await conn.query('SELECT * FROM users'); conn.release(); ctx.body = rows; }); module.exports = router; ``` 8. 创建服务器 在项目中创建一个app.js文件,用于创建koa2服务器并引入路由: ```javascript const Koa = require('koa'); const router = require('./router'); const app = new Koa(); app.use(router.routes()); app.listen(3000, () => { console.log('Server is running at http://localhost:3000'); }); ``` 9. 运行项目 在命令行中进入项目目录,运行以下命令启动服务器: ``` node app.js ``` 在浏览器中访问http://localhost:3000/users,可以看到数据库中的用户数据。 至此,一个简单的koa2 mysql项目就搭建完成了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值