[TOC]
>[success] # Nodejs 链接 mysql 做成工具
上一章做了一个简单的 **demo** ,实现了如何在 **nodejs** 中操作数据库,但是还是没法直接去用,**需要封装成一个公共的方法来使用** ,接下来实现把它封装成公共方法
1. 首先我们在我们的博客项目 **blog-1 文件夹中安装 MySQL 插件** ,执行指令 `npm i mysql --registry=https://registry.npmmirror.com`
2. 然后我们 **在 src 目录下创建 config 文件夹 跟 db.js 文件** ,**db.js** 这里 **根据不同环境返回不同的 mysql 配置** ,然后再创建一个 **db 文件夹,再在里面创建一个 mysql.js** ,专门用来写 **mysql 封装** 的 **公共方法** 的 **文件**
**文件目录结构:**
~~~
blog-1 // 项目文件夹
|__ bin // 可执行文件文件夹
| |__ www.js // 项目启动入口文件
|
|__ src // 放接口的文件夹
| |__ router // 路由(接口)文件夹
| | |__ blog.js // 【博客类型】有关的接口都写在这里
| | |__ user.js // 【用户类型】有关的接口都写在这里
| |
| |__ model // 【存放数据模型】的文件夹
| | |__ resModel.js // 【数据模型类】文件
| |
| |__ controller // 【从数据库取出数据,然后处理数据,返回给路由层】
| | |__ blog.js // 【博客类型】处理数据的文件
| | |__ user.js // 【用户类型】处理数据的文件
| |
| |__ config // 储存配置的文件夹
| | |__ db.js // 根据不同环境返回不同的 mysql 配置
| |
| |__ db // 有关数据储存的文件夹
| |__ mysql.js // 封装 mysql 公共方法的文件
|
|__ app.js // 处理server业务逻辑的方法的文件
|__ package.json // 初始化项目文件
~~~
**blog-1/src/config/db.js**
~~~
const env = process.env.NODE_ENV // 环境变量,这里的环境变量是在 package.json 中声明的
// 配置
let MYSQL_CONF
if(env === 'dev'){ // 本地开发环境配置
MYSQL_CONF = {
host: 'localhost', // 域
user: 'root', // 账号
password: 'Wjc13842859435.', // 密码
port: '3306', // 端口号
database: 'myblog' // database: 'myblog' 相当于在 workbench 中执行的 use myblog 指令,意思是使用 myblog 数据库
}
}
if(env === 'production'){ // 线上环境配置(暂时没有服务器,先拿开发环境配置充当服务器配置,但是实际项目中这里一定是服务器线上的配置)
MYSQL_CONF = {
host: 'localhost', // 域
user: 'root', // 账号
password: 'Wjc13842859435.', // 密码
port: '3306', // 端口号
database: 'myblog' // database: 'myblog' 相当于在 workbench 中执行的 use myblog 指令,意思是使用 myblog 数据库
}
}
module.exports = {
MYSQL_CONF
}
~~~
**blog-1/src/db/mysql.js**
~~~
// 引入 mysql
const mysql = require('mysql')
// 引入配置(根据不同环境返回不同配置)
const { MYSQL_CONF } = require('../config/db')
// 创建链接对象
const con = mysql.createConnection(MYSQL_CONF)
// 开始连接
con.connect()
// 统一执行 sql 的函数
function exec(sql){
const promise = new Promise((resolve, reject) => {
con.query(sql, (err, result) => {
if(err) { // 失败
reject(err)
return
}
resolve(result) // 成功
})
})
return promise
}
// 关闭连接
// con.end()
module.exports = {
exec
}
~~~
这里的 **关闭连接** 为什么注释上呢?因为我们这个 **创建链接对象** 就创建一次,每次使用的是 **exec 方法** ,也就是一个 **单例模式** ,无需每次都创建,所以就不需要 **关闭连接**,如果关闭了连接,后续就查不了了,如果每次都连接数据库就需要关闭,像下图这种,连接了好多次都没有关闭,
![](https://img.kancloud.cn/33/94/33949b813dbc38ba12f17759612ca533_149x362.png)
过一会就会提示打开连接超时了:
![](https://img.kancloud.cn/fa/db/fadbb51d0dabed6b40d71d1a35d2673a_554x103.png)
当你使用 **MySQL 数据库** ,在 **访问结束后** , **不关闭连接** 就相当于 **停车后不驾车离开停车场(Mysql),如果没有其他车辆退出该停车场,停车场就会满,并且不允许新的车辆进入**。同样地,**如果没有关闭数据库连接,并且超出了最大连接数,MySQL 就会拒绝新的连接并导致程序崩溃** 。所以,及时关闭数据库连接是非常重要的。
- NodeJS基础
- 什么是NodeJS
- npm
- Node.js+Express+Koa2+开发Web Server博客
- 下载和安装node
- nodejs和js的区别
- commonjs-演示
- nodejs如何debugger
- server端与前端的区别
- 项目需求分析
- 开发接口(不使用任何框架)
- http-概述
- 处理get请求
- 处理post请求
- 处理http请求的综合示例
- 搭建开发环境
- 初始化并且开发路由
- 开发博客项目之数据存储
- MySql介绍
- 数据库操作(创建和增、删、查)
- Nodejs 操作 Mysql
- Nodejs 链接 mysql 做成工具
- API 对接 MySQL
- 开发博客项目之登陆
- cookie-介绍
- cookie用于登录验证
- cookie做限制