日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

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

發(fā)布時間:2024/9/19 数据库 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 koa2 mysql增删改查_koa2实现对mysql的增删改查函数封装 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

// 項(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 熟女国产精品一区二区三 | 亚洲人午夜精品 | av成人精品| 视频福利在线观看 | 亚洲一区黄色 | 亚洲欧美综合一区二区 | 国产精品久久久久久久久久久久午夜片 | 欧美精彩视频 | 久久99热久久99精品 | 龚玥菲三级露全乳视频 | 国产96视频 | jlzzjlzz国产精品久久 | 久久午夜伦理 | 中国黄色网页 | 国产亚洲精品aaaaaaa片 | 成人欧美一区二区三区黑人动态图 | 中文字幕第31页 | 国产精品久久久久久久免费看 | 亚洲免费网 | 东京热无码av一区二区 | 婷婷免费 | 双女主黄文| 日韩理论在线 | 日本a级c片免费看三区 | 五月激情丁香婷婷 | 插插综合视频 | 久久综合伊人77777麻豆 | 国产精品国产三级国产普通话对白 | 国产一级免费观看 | 日韩欧美电影一区二区三区 | 三级视频黄色 | 欧美人妖乱大交 | 美女综合网 | 男女黄色又爽大片 | 日本一区二区视频 | 精品在线99 | 久久久久久久久99精品 | 免费在线观看小视频 | 国产自产| 久久中文字幕网 | 日本aa大片 | 色一情一乱一区二区三区 | 国产+日韩+欧美 | 看了下面会湿的视频 | 免费又黄又爽又猛大片午夜 | 日本黄色片在线播放 | 日韩在线视频你懂的 | 人妻精品无码一区二区三区 | 国产精品熟妇一区二区三区四区 | 怡春院欧美 | 91麻豆精品国产午夜天堂 | 老熟妇一区二区三区啪啪 | 午夜精品在线播放 | 精品国产av 无码一区二区三区 | 黑人与日本少妇 | 欧美日韩加勒比 | 蜜桃av久久久亚洲精品 | 国产稀缺真实呦乱在线 | 国产精品人人做人人爽 | 亚洲性av| 亚洲精品一区久久久久久 | 国产成人欧美 | 超碰人人在线 | 亚洲av无码乱码在线观看富二代 | 污动漫网站 | 91欧美激情一区二区三区 | 成人视品 | 国产日韩网站 | 污污网站免费在线观看 | 久久亚洲在线 | 一区二区成人在线 | 91久久久久久 | 紧身裙女教师三上悠亚红杏 | 亚洲欧美天堂网 | 日韩精品不卡 | 精品少妇av | 欧美色欧美 | 蜜臀av性久久久久蜜臀aⅴ麻豆 | 99热99热 | 亚洲无码精品一区二区三区 | 狂野欧美性猛交xxxx777 | 国产一级高清视频 | 欧美成人精品一区二区三区 | 免费黄色链接 | 麻豆自拍偷拍 | 天堂av免费看 | 四川一级毛毛片 | 日本视频www | 一个色av| 亚洲啊v在线 | 精品国产乱码久久久久久88av | 偷拍网亚洲 | 一本色道久久综合亚洲二区三区 | 成人在线观看18 | av一区在线播放 | 天天插天天射天天干 | 久久久无码人妻精品无码 | 激情久久中文字幕 | 国产成人在线观看免费网站 |