node 连接mysql操作mysql的工具类封装,node后端操作mySql、

一、工具类代码如下:

/** @Description: ------ node连接并操作mysql封装 ------* @Creater: snows_l snows_l@163.com* @Date: 2023-04-12 15:38:57* @LastEditors: snows_l snows_l@163.com* @LastEditTime: 2024-04-09 16:16:04* @FilePath: /Website/Server/utils/connDB.js*/
class DBPool {constructor() {this.mysql = require('mysql');this.config = require('../db.config.json');//1.创建mysql连接对象this.pool = this.mysql.createPool(this.config);}query(sql, params, callBack) {//2.打开this.pool.getConnection((err, connection) => {if (err) {// console.log('数据库连接失败', err);throw err;}// console.log('数据库连接成功');// 3.执行sql查询connection.query(sql, params, (err, results, fields) => {// 4.释放连接connection.release();// 5.销毁连接: 当连接不需要使用且需要从连接池中移除的时候,我们可以使用destory方法,该方法使用如下所示:connection.destroy();if (err) {// console.log('数据库操作失败');throw err;}// console.log('数据库操作成功');callBack && callBack({ results, fields });});});}queryAsync(sql, params) {const self = this;return new Promise((resolve, reject) => {//2.获取连接this.pool.getConnection((err, connection) => {if (err) {console.log('数据库连接失败', err);reject(err);return;}// console.log('数据库连接成功');//3.执行sql查询console.log('-------- sql --------',{ spl, params });connection.query(sql, params, (err, results, fields) => {connection.release(); //释放链接connection.destroy(); //销毁链接if (err) {console.log('数据库操作失败');reject(err);return;}// console.log('数据库操作成功');resolve({results,fields});});});});}
}module.exports = new DBPool();

mySql连接配置:

../db.config.json

{"host": "124.223.41.220","port": 3306,"user": "snows_l","password": "********","database": "websitdb"
}

二、使用如下:

/** @Description: ------------ fileDescription -----------* @Author: snows_l snows_l@163.com* @Date: 2024-04-15 14:29:31* @LastEditors: snows_l snows_l@163.com* @LastEditTime: 2024-04-17 16:02:27* @FilePath: /Website/Server/src/router/user.js*/
const express = require('express');/** 引入工具类*/
const db = require('../../utils/connDB');
const { name } = require('body-parser');
const { generateToken, verifyToken } = require('../../utils/handleToken');
// 解密前端的加密密码
const { decryptPwd } = require('../../utils/node-rsa');const router = express.Router();// 获取user列表
router.get('/user/list', (req, res) => {const { page = 1, size = 10, role, name } = req.query;let offset = (page - 1) * size;let sql = `SELECT * FROM sys_user`;let lensql = `SELECT count('user_id') FROM sys_user`;if (name) {sql += ` WHERE user_name LIKE '%${name}%'`;lensql += ` WHERE user_name LIKE '%${name}%'`;}if (role) {sql += ` ${name ? 'AND' : 'WHERE'} role = ${role}`;lensql += ` ${name ? 'AND' : 'WHERE'} role = ${role}`;}selectSql = `${sql} ORDER BY user_id ASC LIMIT ${size} OFFSET ${offset};`;// 参数的使用 数组的形式// selectSql = `${sql} ORDER BY user_id ASC LIMIT ? OFFSET ?;`;// const params = [size, offset];/** 使用工具类的queryAsync异步方法操作sql数据库*/db.queryAsync(lensql).then(count => {// 带参数// db.queryAsync(selectSql, params).then(result => {db.queryAsync(selectSql).then(result => {res.send({code: 200,data: result.results,msg: 'success',total: count.results[0]["count('user_id')"]});});});
});

在index中引入user.js接口文件即可

/** @Description: ------ 文件描述 ------* @Creater: snows_l snows_l@163.com* @Date: 2023-04-15 19:00:39* @LastEditors: snows_l snows_l@163.com* @LastEditTime: 2024-04-18 15:11:06* @FilePath: /Website/Server/src/index.js*/const path = require('path');
const express = require('express');
// 对post请求的请求体进行解析
const bodyParser = require('body-parser');
// 主要用来解决客户端请求与服务端的跨域问题
const cors = require('cors');// 引入路由
const sysRouter = require('./router/sys');
const favorsRouter = require('./router/favors');
const dictRouter = require('./router/dict');
const userRouter = require('./router/user');
const roleRouter = require('./router/role');// 获取.env中的环境变量
const dotenv = require('dotenv').config({ path: './.env' });
// console.log('-------- dotenv --------', dotenv);
const jwtKey = process.env.APP_JWTKEY;
// console.log('-------- jwtKey --------', jwtKey);const app = express();
app.use(bodyParser.json());
app.use(cors());// 访问服务的接口
app.get('/', (req, res) => {res.send('hello node server');
});// 路由. (为了前端部署的时候nginx好做代理, 所以我同意了一个前缀)
app.use('/sys', sysRouter);
app.use('/sys', dictRouter);
app.use('/sys', favorsRouter);
app.use('/sys', userRouter);
app.use('/sys', roleRouter);//设置静态资源访问路径   这样就可以直接通过 http://localhost:3333/filename 访问public目录下的静态资源文件
app.use(express.static(path.join(__dirname, '../public')));// 服务启动在3333端口
app.listen(3333, () => {console.log('-------- 服务启动了,运行在http://localhost:3333 --------');
});

如果有需要完整的项目吱一声。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/7414.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java多线程:常见的线程的创建方法及Thread类详解

目录 一.并发编程相关概念 线程与进程 多线程 Java中线程的状态 二.线程的创建方法 方法一:继承Thread类 方法二:实现Runnable接口 其他方法 三.Thread类详解 Thread常见构造方法 Thread常见属性 Thread常见方法 start() 与 run() sleep(…

Redis教程——主从复制

在上篇文章我们学习了Redis教程——管道,这篇文章学习Redis教程——主从复制。 主从复制 为了数据更加安全可靠,在实际的项目中,肯定是有多个Redis服务,主机Redis以写为主,从机Redis以读为主,当主机Redis…

长难句打卡5.7

In December 2010 America’s Federal Trade Commission (FTC) proposed adding a “do not track” (DNT) option to Internet browsers, so that users could tell advertisers that they did not want to be followed. 2010年12月,美国美国联邦贸易委员会(FTC)提…

在数字化转型的浪潮中,CBDB百数服务商如何破浪前行?

在信息化时代,传统咨询企业面临着数字化转型的挑战与机遇。如何利用数字化技术提升业务效率、增强客户黏性,成为了行业关注的焦点。云南析比迪彼企业管理有限公司(CBDB)作为云南地区的企业咨询服务提供商,率先与百数展…

Springai入门

一、概述 1.1发展历史 1.2大模型 大模型,是指具有大规模参数和复杂计算结构的机器学习模型。这些模型通常由深度神经网络构建而成,拥有数十亿甚至数千亿个参数。其设计目的在于提高模型的表达能力和预测性能,以应对更加复杂的任务和数据&…

CSS 样式清单整理:css 绘制三角形

css 绘制三角形 div {width: 0;height: 0;border-width: 0 40px 40px;border-style: solid;border-color: transparent transparent red; }实现带边框的三角形 <div id"blue"><div>#blue {position:relative;width: 0;height: 0;border-width: 0 40px …

虚幻引擎5 Gameplay框架(二)

Gameplay重要类及重要功能使用方法&#xff08;一&#xff09; 配置LOG类及PlayerController的网络机制 探索验证GamePlay重要函数、类的执行顺序与含义 我们定义自己的日志&#xff0c;专门建立一个存放自己日志的类&#xff0c;这个类继承自BlueprintFunctionLibrary 然后…

零基础怎么学鸿蒙开发?

对于零基础的学习者来说&#xff0c;掌握鸿蒙开发不仅是迈向新技术的第一步&#xff0c;更是开拓职业道路的重要机遇。随着鸿蒙系统在各行各业的应用逐渐扩展&#xff0c;对于掌握这一项技术的开发人员需求也随之增长。下文将为大家提供针对零基础学习鸿蒙开发的逻辑&#xff0…

提高曝光率与点击率:海外KOL推广与社交媒体算法的完美结合

在当今数字化时代&#xff0c;社交媒体已经成为了企业和品牌推广的重要渠道之一&#xff0c;海外KOL也在各个领域拥有着庞大的粉丝群体和影响力。然而&#xff0c;想要在众多内容中脱颖而出&#xff0c;提高推广内容的曝光率和点击率&#xff0c;仅仅依靠KOL的影响力是不够的&a…

vue + vite 使用onchange和prettier 进行文件变化监视和格式化

在现代的前端开发中&#xff0c;文件的格式化和实时监视是一个必不可少的环节。为了提高开发效率&#xff0c;我们可以利用一些工具来自动化这个过程。本文将介绍如何使用 onchange 和 prettier 来监视文件变化并进行格式化。 concurrently和onchange concurrently 是一个用于…

论文阅读-THE GENERALIZATION GAP IN OFFLINE REINFORCEMENT LEARNING(ICLR 2024)

1.Motivation 本文希望比较online RL、offline RL、序列决策和BC等方法的泛化能力(对于不同的初始状态、transition functions、reward functions&#xff0c;现阶段offline RL训练的方式都是在同一个环境下的数据集进行训练)。实验发现offline的算法相较于online算法对新环境…

Oracle-savepoint相关

总结&#xff1a;在同一个会话下&#xff0c;如果savepoint的名称相同&#xff0c;新的savepoint则会覆盖旧的savepoint&#xff0c;在不同的会话下&#xff0c;savepoint的名称相同&#xff0c;不会相互影响。 为了避免savepoint名称相同&#xff0c;可以在建立savepoint名称时…

特别提醒:2024年软考连考时间再次调整!

近期&#xff0c;辽宁省发布了今年5月软考考试安排&#xff0c;有以下变化&#xff1a; 高级论文单独考试&#xff08;2小时&#xff09;&#xff0c;之前是案例和论文一起考&#xff0c;案例剩下的时间可以给论文用&#xff0c;现在是综合和案例一起考&#xff0c;综合剩下的…

菜鸡学习netty源码(一)——ServerBootStrap启动

1.概述 对于初学者而然,写一个netty本地进行测试的Server端和Client端,我们最先接触到的类就是ServerBootstrap和Bootstrap。这两个类都有一个公共的父类就是AbstractBootstrap. 那既然 ServerBootstrap和Bootstrap都有一个公共的分类,那就证明它们两个肯定有很多公共的职…

Redis集群.md

Redis集群 本章是基于 CentOS7 下的 Redis 集群教程&#xff0c;包括&#xff1a; 单机安装RedisRedis主从Redis分片集群 1.单机安装Redis 首先需要安装Redis所需要的依赖&#xff1a; yum install -y gcc tcl然后将课前资料提供的Redis安装包上传到虚拟机的任意目录&#xf…

PHP8.2-xlswriter 扩展

https://pecl.php.net/package/xlswriter ### 进入/root/ cd ~ ### 下载扩展 wget https://pecl.php.net/get/xlswriter-1.5.5.tgz ### 解压扩展 tar -zxvf xlswriter-1.5.5.tgz ### 进入扩展目录 cd xlswriter-1.5.5 ### 查找对应php版本的phpize find / -name phpi…

sh: 1: appimagetool: not found

下载 appimagetool&#xff1a; 首先&#xff0c;访问 AppImageHub 或者 AppImage GitHub releases 页面 查找 appimagetool 的最新版本。 安装 appimagetool&#xff1a; 下载完成后&#xff0c;你将获得一个 .AppImage 文件。你需要将这个文件转换为可执行文件&#xff0c…

如何在CentOS部署青龙面板并实现无公网IP远程访问本地面板

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Java双亲委派机制

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 概述 Java程序在运…

一起长锈:4 默认不可变的变量绑定与引用(从Java与C++转Rust之旅)

讲动人的故事,写懂人的代码 故事梗概:在她所维护的老旧Java系统即将被淘汰的危机边缘,这位在编程中总想快速完事的女程序员,希望能转岗到公司内部使用Rust语言的新项目组,因此开始自学Rust;然而,在掌握了Rust编程知识之后,为了通过Rust项目组的技术面试,使得转岗成功而…