node连接mysql数据库有两种方式:
-直连
-连接池
一、node直连数据库
const mysql = require('mysql')
const db = {
host: 'localhost',
port: 3306,
user: 'root',
password: 'root',
database: 'test'
}
let connection = mysql.createConnection(db)
connection.connect((err) => {
if (err) throw err
console.log('数据库连接成功')
})
let sql = "select * from userinfo where username = 'xiaowang'"
connection.query(sql, (err, res) => {
console.log('res', res)
})
connection.end((err) => {
if (err) throw err
console.log('数据库断开连接')
})
1.占位符的使用
let sql = 'select * from userinfo where username = ? '
connection.query(sql, 'xiaohu', (err, res) => {
console.log('res', res)
})
二、通过连接池连接数据库
连接池原理
举个栗子:
没有连接池的时候,船家只有一条船,这一条船不断地送人过河。
有连接池之后,船家(连接池)有10(最大连接数)条船,10条船可以同时送人过河。
const mysql = require('mysql')
const db = {
connectionLimit: 10,
host: 'localhost',
port: 3306,
user: 'root',
password: 'root',
database: 'test'
}
let pool = mysql.createPool(db)
pool.getConnection((err, connection) => {
if (err) throw err
console.log('数据库连接成功')
let sql = 'select * from userinfo where username = ?'
connection.query(sql, 'xiaohu', (error, res) => {
console.log(res)
})
//释放连接池的连接
connection.release()
})
三、将两种方法封装起来
1、封装连接池方法
const mysql = require('mysql')
const db = {
connectionLimit: 10,
host: 'localhost',
port: 3306,
user: 'root',
password: 'root',
database: 'test'
}
module.exports = function(sql, params) {
return new Promise((resolve, reject) => {
// 一、新建一个连接池
let pool = mysql.createPool(db)
// 二、连接
pool.getConnection((error, connection) => {
// 三、使用sql语句操作
connection.query(sql, params, (err, results, fields) => {
if (err) {
reject(err)
} else {
resolve(results)
}
// 四、释放连接池
connection.release()
})
})
})
}
使用
let db = require('../public/mysql/index')
let sql = 'select * from userinfo where username = ? '
let arr = 'xiaohu'
db(sql, arr).then((data) => {
console.log(data)
res.send(data)
}).catch((err) => {
console.error(err)
res.send(err)
})
2、封装直接连的方法
const mysql = require('mysql')
const db = {
host: 'localhost',
port: 3306,
user: 'root',
password: 'root',
database: 'test'
}
function getData(sql, params) {
return new Promise((resolve, reject) => {
let connection = mysql.createConnection(db)
connection.connect((err, conn) => {
console.log('数据库连接成功')
connection.query(sql, params, (error, res) => {
if (error) {
reject(error)
} else {
resolve(res)
}
})
})
})
}
使用
let sql = 'select * from userinfo where username = ? '
let params = 'xiaowang'
getData(sql, params).then((data) => {
console.log(data)
}).catch((err) => {
console.error(err)
})