[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 方法** ,也就是一個 **單例模式** ,無需每次都創建,所以就不需要 **關閉連接**,如果關閉了連接,后續就查不了了,如果每次都連接數據庫就需要關閉,像下圖這種,連接了好多次都沒有關閉,

過一會就會提示打開連接超時了:

當你使用 **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做限制