koa2 mysql增删改查_koa2实现对mysql的增删改查函数封装
// 項(xiàng)目開始先造一個簡單的node服務(wù)器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');
});
// 接下來進(jìn)行對路由的配置router.js:
const Router = require('koa-router');
const Route = new Router();
// 從processData.js中引入這四個方法
const {
wantAddData,? // 添加數(shù)據(jù)
wantDeleData,? // 刪除數(shù)據(jù)
wantExitData,? // 修改數(shù)據(jù)
wantFindData? ?// 查找數(shù)據(jù)
} = require('../processData/processData');
Route.post('/add',wantAddData);
Route.get('/getShopMsg', wantFindData);
Route.post('/exitShopMsg', wantExitData);
Route.get('/delete', wantDeleData);
module.exports = Route;
// 這樣一個簡單版的node服務(wù)器就架好了
// 接下來就是連接上本地的mysql數(shù)據(jù)庫了
// 創(chuàng)建mysql.js
const Mysql = require('mysql');
const { _SQLCONFIG } = require('../config');
//?_SQLCONFIG 保存你的mysql信息,結(jié)構(gòu)如下:
/**
_SQLCONFIG: {
host: 'localhost',
user: 'root',
port: '3306',
database: '',
password: '',
connectionLimit: 50 // 最大連接數(shù)
}
*/
// 創(chuàng)建數(shù)據(jù)庫連接
const pool = Mysql.createPool(_SQLCONFIG);
// 通過connection的query方法統(tǒng)一執(zhí)行增刪改查的操作。
//?connecQuery為增刪改查方法的函數(shù)名
//?statements進(jìn)行增刪改查操作的條件,查詢條件都由前端訪問時將條件傳入
//?parameter 進(jìn)行添加或修改的數(shù)據(jù)
function poolFn(connecQuery, statements, parameter) {
// getConnection 創(chuàng)建連接池
return new Promise((resolve, reject) => {
pool.getConnection((err, connection) => {
if(err) {
throw err;
reject('建立連接池失敗');
return;
}
connecQuery(connection, statements, parameter).then(data => {
connection.release(); // 到這步說明已經(jīng)完成操作,釋放連接
resolve(data);
});
});
// console.log(pool._allConnections.length); // 連接池里的連接數(shù)
});
}
/*
* connection 連接句柄
* statements 查詢語句
* */
// 基于promise方法實(shí)現(xiàn)
// 查詢數(shù)據(jù)
function connecQueryFind(connection, statements) {
return new Promise((resolve, reject) => {
connection.query(statements, (err, result) => {
if(err) {
throw err;
reject('查詢失敗');
}
resolve(result);
});
})
}
// 添加數(shù)據(jù)
function connecQueryAdd(connection, statements, parameter) {
return new Promise((resolve, reject) => {
connection.query(statements, parameter, (err, result) => {
if(err) {
throw err;
reject('添加失敗');
}
resolve(result);
});
})
}
// 刪除數(shù)據(jù)
function connecQueryDele(connection, statements) {
return new Promise((resolve, reject) => {
connection.query(statements, (err, result) => {
if(err) {
throw err;
reject('刪除失敗');
}
resolve(result);
});
})
}
// 修改數(shù)據(jù)
function connecQueryExit(connection, statements, parameter) {
return new Promise((resolve, reject) => {
connection.query(statements, parameter, (err, result) => {
if(err) {
throw err;
reject('修改失敗');
}
resolve(result);
});
})
}
// 將方法封裝統(tǒng)一導(dǎo)出
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請求參數(shù)--------------------------------------
// ------------------ctx.request.body獲取post請求參數(shù)------------------------------
// let data = fs.readFileSync('./k_Mongo/shopList.json', 'utf-8'); 讀取文件信息
// 這邊通過async方法保證數(shù)據(jù)的同步獲取
let wantFindData = async(ctx) => { // 獲取數(shù)據(jù)
let res = ctx.query;
// 返回的數(shù)據(jù)格式為json
ctx.response.type = 'json';
let statements = res.statements;
await findData(statements).then(data => {
ctx.body = data;
}, () => {
ctx.body = { err: '數(shù)據(jù)獲取失敗' };
});
};
let wantAddData = async(ctx) => { // 添加數(shù)據(jù)
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: '數(shù)據(jù)添加失敗' };
});
};
let wantDeleData = async(ctx) => { // 刪除數(shù)據(jù)
let res = ctx.query;
let statements = res.statements;
ctx.response.type = 'json';
await deleData(statements).then(data => {
ctx.body = data;
}, () => {
ctx.body = { err: '數(shù)據(jù)刪除失敗' };
});
};
let wantExitData = async(ctx) => { // 修改數(shù)據(jù)
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: '數(shù)據(jù)修改失敗' };
});
};
module.exports = {
wantFindData,
wantAddData,
wantDeleData,
wantExitData
};
// 到這一步基本上結(jié)束了,可以在前端使用試驗(yàn)一下
// 先自己封裝一個axios的方法,結(jié)合上次講的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文件專門存放接口查詢
// 這邊就只使用添加數(shù)據(jù)和獲取數(shù)據(jù)
import fetch from './fetch';
// 添加商品數(shù)據(jù)
export function addShopData(params) {
return new Promise((resolve, reject) => {
fetch('/add', 'post', params).then(data => {
resolve(data);
}, err => {
reject(err);
})
});
}
// 獲取商品列表數(shù)據(jù)
export function getShopData(params) {
return new Promise((resolve, reject) => {
fetch('/getShopMsg', 'get', params).then(data => {
resolve(data);
}, err => {
reject(err);
})
});
}
// 修改商品列表數(shù)據(jù)
export function exitShopData(params) {
return new Promise((resolve, reject) => {
fetch('/exitShopMsg', 'post', params).then(data => {
resolve(data);
}, err => {
reject(err);
})
});
}
// 最后一步了
// React先創(chuàng)建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);
// 商品數(shù)據(jù)
this.state = {
shopData: [],
shopData02: []
};
// this.conUl = React.createRef();
// 查詢條件
// 查詢shopMsg表的所有數(shù)據(jù)
this.getParams = {
statements: 'SELECT * FROM shopMsg'
};
// 這是修改的數(shù)據(jù)
// let DATA = [{"detImg":"/static/images/all/1495869803526192.jpg"}];
// 修改的參數(shù)
// this.exitParams = {
// statements: 'UPDATE shopMsg SET product_det=? WHERE product_id="KY_13141544361478180"',? // 修改條件
// parameter: [JSON.stringify(DATA)]? ? ?// 修改的數(shù)據(jù)
// };
// product_genre product_det
}
componentWillMount() {
// 進(jìn)行查詢操作
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)
}
}
// 這是查詢出來的數(shù)據(jù):
// 這是我數(shù)據(jù)庫里的product_id='KY_13141544361478180'的數(shù)據(jù),對應(yīng)上面查到的第一條數(shù)據(jù)
// 添加數(shù)據(jù)就不展示了,因?yàn)檫@里面的數(shù)據(jù)都是我添加進(jìn)去的
// 本文只是實(shí)現(xiàn)了基本的mysql增刪改查,對于mysql更深層的操作目前還沒達(dá)到那個境界,以后還需更加努力!文筆不好,謝謝閱讀,希望對你有所幫助。
總結(jié)
以上是生活随笔為你收集整理的koa2 mysql增删改查_koa2实现对mysql的增删改查函数封装的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 董明珠回应高层元老辞职 任何人不能为企业
- 下一篇: mysql5.6数据库位置_MYSQL5