【实战】nodejs 必会技能 —— 封装 mysql 数据库连接

这篇具有很好参考价值的文章主要介绍了【实战】nodejs 必会技能 —— 封装 mysql 数据库连接。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


  • [mysql - mysql中文文档翻译 - Breword 文档集合]:(https://www.breword.com/mysqljs-mysql)

一、准备工作

安装依赖包:

npm i mysql -s
  • [mysql - npm]:(https://www.npmjs.com/package/mysql)

二、连接数据库

const mysql = require("mysql");
const db_config={
    host:"localhost",
    user:"root",
    password:"root",
    port:"3306",
    database:"mydb" 
}
let conn = mysql.createConnection(db_config);

// 连接数据库
conn.connect(err => {
    if(err) {
        throw err
    } else{
        console.log("连接成功!");
    }
})

// 查询数据库
conn.query("select * from user", (err, res) => {
    if(err){
        throw err
    }else{
        console.log(res);
        closeMysql(conn);
    }
});

// 关闭数据库
let closeMysql = conn => {
    conn.end(err => {
        if(err){
        	throw err
        }else{
            console.log('关闭成功!');
        }
	});
}

运行中若遇到如下报错,请检查输入信息是否正确(host、port、user、password 等),jdbc配置中拿到的相关信息尤其是密码很可能是加密后的

Error: ER_ACCESS_DENIED_ERROR: Access denied for user ‘root‘@‘localhost‘ (using password: YES)

node - MySQL 数据库连接配置项:

  • host:主机地址 (默认:localhost)
  • user:用户名
  • password:密码
  • port:端口号 (默认:3306)
  • database:数据库名
  • charset:连接字符集(默认:‘UTF8_GENERAL_CI’,注意字符集的字母都要大写)
  • localAddress:此IP用于TCP连接(可选)
  • socketPath:连接到unix域路径,当使用 host 和port 时会被忽略
  • timezone:时区(默认:‘local’)
  • connectTimeout:连接超时(默认:不限制;单位:毫秒)
  • stringifyObjects:是否序列化对象(默认:‘false’ ;与安全相关)
  • typeCast:是否将列值转化为本地JavaScript类型值 (默认:true)
  • queryFormat:自定义query语句格式化方法
  • supportBigNumbers:数据库支持bigint或decimal类型列时,需要设此option为true (默认:false)
  • bigNumberStrings:supportBigNumbers和bigNumberStrings启用 强制bigint或decimal列以JavaScript字符串类型返回(默认:false)
  • dateStrings:强制timestamp,datetime,data类型以字符串类型返回,而不是JavaScriptDate类型(默认:false)
  • debug:开启调试(默认:false)
  • multipleStatements:是否许一个query中有多个MySQL语句 (默认:false)
  • flags:用于修改连接标志
  • ssl:使用ssl参数(与 crypto.createCredenitals 参数格式一至)或一个包含ssl配置文件名称的字符串,目前只捆绑 Amazon RDS 的配置文件

欢迎关注【程序边界】

三、数据池保持连接 & 公共方法封装

数据库连接池 pool 可以有效避免频繁连接、断开导致的资源消耗

1.封装

const mysql = require('mysql')

const db_config = {
	host:"localhost",
	user:"root",
	password:"root",
	port:"3306",
	database:"mydb" 
}

let sqlConnTemp = (sql, params) => {
  return new Promise((resolve, reject) => {
    let conn = mysql.createConnection(db_config)
    let closeMysql = conn => conn.end(err => if(err) throw err )
    conn.connect((err, conn) => {
      err ? reject(err) : conn.query(sql, params, (err, data, fields) => {
        err ? reject(err) : resolve(data)
      })
      closeMysql(conn);
    })
  })
}

let sqlConn = (sql, params) => {
  return new Promise((resolve, reject) => {
  	// 连接池(保持连接)
    const pool = mysql.createPool(db_config)
    pool.getConnection((err, conn)=>{
        err ? reject(err) : conn.query(sql, params, (err, data, fields) => {
	        err ? reject(err) : resolve(data)
      	})
      	conn.release() // 仅释放未关闭
      	// pool.end() // 关闭连接
    })
  })
}

module.exports = { sqlConn,sqlConnTemp }

2.调用

const { sqlConn }= require('./mysql')

sqlConn('select * from user_table where age = ? and sex = ?',[21, 1]).then((data) => {
    console.log(data)
    res.send(data)
}).catch((err) => {
    console.error(err)
    res.send(err)
})

若是担心网络问题造成连接失败,可以在连接reject部分添加定时并回调连接


未完待续。。。欢迎留言一起学习探讨


拓展阅读:

  • [数据库连接池、sequelize实现增删改查等操作]:(https://blog.csdn.net/TangJing_/article/details/121602581)

四、拓展学习

1.mysql 命令行

(1)查看当前所有数据库:

show database;

(2)使用指定数据库:

use DBName;

(3)查看当前库的所有表:

show tables;

(4)查看其它库的所有表:

show tables from DBName;

(5)创建表:

create table tableName (
	colName dataType;
	colName dataType;
	...
);

(6)查看表结构

desc tableName;

(7)查看当前版本

  • 如果没有连接到了 mysql 服务,可以输入以下命令:
# mysql  Ver 8.0.32 for Win64 on x86_64 (MySQL Community Server - GPL)
mysql -V
# 用账号 ODBC,连接上MySQL服务器,默认连接到localhost上的3306端口。
mysql -v
# 仅限 windows 系统(`|`管道符;find命令查找字符串;注意引号)
mysql --help | find "Ver"
# 仅限 linux系统(`|`管道符;grep命令查找字符串)
mysql --help | grep Ver

权限有问题会报错:

  • ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: NO)
  • 如果已经连接到了 mysql 服务,可以输入以下命令:
select version();

node连接mysql封装,数据库,mysql,nodejs,node,node.js
或:

status;

node连接mysql封装,数据库,mysql,nodejs,node,node.js
或:

\s

node连接mysql封装,数据库,mysql,nodejs,node,node.js

2.语法规范

  • 不区分大小写,但是建议关键字大写,表名、列名小写
  • 每条命令分号结尾
  • 每条命令根据需要,可以进行缩进,或换行
  • 注释
    • (1)单行注释:#注释文字
    • (2)单行注释:–[空格]注释文字
    • (3)多行注释:/* 注释文字

3.mysql 其他

(1)查看自己数据库文件所在的位置

  • 在mysql文件夹找到 my.ini 文件
    node连接mysql封装,数据库,mysql,nodejs,node,node.js

  • 使用记事本打开:
    node连接mysql封装,数据库,mysql,nodejs,node,node.js

  • Ctrl+F,搜索 datadir

  • 如果上面的方式你掌握了,下面来一个终极大招:

show global variables like "%datadir%";

登入后,一行命令直接查出:

node连接mysql封装,数据库,mysql,nodejs,node,node.js
数据库整体搬迁直接迁移目录即可

my.ini

[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录
basedir=D:\\Program Files\mysql-8.0.19-winx64
# 设置mysql数据库的数据的存放目录
datadir=D:\\Program Files\mysql-8.0.19-winx64\Data
# 允许最大连接数
max_connections=200
# 允许连接失败的次数(防止有人攻击数据库系统)
max_connect_errors=10
# 服务端使用的字符集默认为UTF8
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8

转载请留言文章来源地址https://www.toymoban.com/news/detail-691495.html

到了这里,关于【实战】nodejs 必会技能 —— 封装 mysql 数据库连接的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【入门必看,MySQL从0到1系列- 数据库保姆级图解教程:轻松掌握数据库管理技能】

    MySQL 是全球最流行的用于管理关系数据库的开源数据库软件。除了具有强大的功能外,它还比 Microsoft SQL Server 和 Oracle 数据库快速、可扩展且更易于使用。因此,PHP 脚本通常用于创建功能强大且动态的服务器端/基于 Web 的应用程序。 注意:  数据库是数据的结构化集合 SQL

    2024年02月09日
    浏览(59)
  • 【入门必看,MySQL从0到1系列- 数据库保姆级图解教程:轻松掌握数据库管理技能】+福利网盘分享MySQL从0到1资料+课程教程+视频+源码

    MySQL 是全球最流行的用于管理关系数据库的开源数据库软件。除了具有强大的功能外,它还比 Microsoft SQL Server 和 Oracle 数据库快速、可扩展且更易于使用。因此,PHP 脚本通常用于创建功能强大且动态的服务器端/基于 Web 的应用程序。 注意:  数据库是数据的结构化集合 SQL

    2024年02月08日
    浏览(67)
  • MySQL数据库备份实战

    一、为什么进行数据库备份? 保证业务连续性 :数据库中存储着企业的核心业务数据,如果数据丢失或损坏,将会对企业的业务运营产生重大影响。通过定期备份数据库,可以在系统故障或数据丢失时快速恢复数据,保证业务的连续性。 保护数据资产 :数据库中存储着企业

    2024年02月08日
    浏览(45)
  • VsCode + CMake构建项目 C/C++连接Mysql数据库 | 数据库增删改查C++封装 | 信息管理系统通用代码 ---- 课程笔记

    这个是B站Up主:程序员程子青的视频  C++封装Mysql增删改查操作_哔哩哔哩_bilibili https://www.bilibili.com/video/BV1m24y1a79o/?p=6spm_id_from=pageDrivervd_source=a934d7fc6f47698a29dac90a922ba5a3 安装mysql :mysql 下载和安装和修改MYSQL8.0 数据库存储文件的路径-CSDN博客 创建数据库和表: 参考这篇文章:w

    2024年01月19日
    浏览(49)
  • 【数据库】索引必知必会

    数据库中索引(Index)是一种帮助快速查找数据的数据结构,可以把它理解为书的目录,通过索引能够快速找到数据所在位置。 使用索引可以加快数据查找的效率,这是创建索引的最主要原因。 场景的索引数据结构有:Hash表(通过hash算法快速定位数据,但不适合范围查询,

    2023年04月20日
    浏览(50)
  • Zabbix监控MySQL数据库实战

    zabbix监控mysql的方式 只是安装agent 启用模板监控 启用自定义脚本的模板监控 使用zabbix模版及结合shell脚本监控mysql 创建mysql的zabbix授权用户 mysql grant all PRIVILEGES on *.* to zabbix@\\\'localhost\\\' identified by \\\'zabbix\\\';  ###创建一个有权限的访问用户lqb密码设置zabbix Query OK, 0 rows affected (0.04 s

    2024年02月12日
    浏览(33)
  • 【数据库——MySQL(实战项目1)】(1)图书借阅系统——数据库结构设计

    经过前期的学习,我们已经掌握数据库基础操作,因此是时候来做一个实战项目了—— 图书借阅系统 。对于图书借阅系统,相信大家不难想到至少需要 3 张表,分别是: 借阅人表 , 图书表 和 借阅信息表 (当然不限于这些表,大家可以根据自己的想法创建其它表)。 那么

    2024年02月03日
    浏览(65)
  • 数据库-MySQL 实战项目——学生选课系统数据库设计与实现(附源码)

            该项目非常适合MySQL入门学习的小伙伴,博主提供了源码、数据和一些查询语句,供大家学习和参考,代码和表设计有什么不恰当还请各位大佬多多指点。  MySQL可视化工具:navicat;  数据库:MySql 5.7/8.0等版本均可;      学生选课系统主要完成某学校教务系统中

    2024年04月08日
    浏览(56)
  • Jmeter(七) - 从入门到精通 - 建立数据库测试计划实战<MySQL数据库>(详解教程)

    1.简介   在实际工作中,我们经常会听到数据库的性能和稳定性等等,这些有时候也需要测试工程师去评估和测试,上一篇文章主要介绍了jmeter连接和创建数据库测试计划的过程,在文中通过示例和代码非常详细地介绍给大家,希望对各位小伙伴和童鞋们的学习或者工作具有一

    2024年02月13日
    浏览(53)
  • 【MySQL】基础实战篇(1)—数据库与数据表的操作

    创建数据库 语法: 注: 在同一个数据库服务器上必须是唯一的,不允许存在同名的数据库。 此外在创建数据库时如果不进行自定义设置编码方式,就会使用系统默认的编码方式,所以我们可以在创建数据库的同时自定义设置编码方式。 语法: 字符集 是定义MySQL存储字符串

    2024年02月08日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包