node连接mysql数据库(含方法封装)

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('数据库断开连接')
})
image.png

1.占位符的使用

let sql = 'select * from userinfo where username = ? '
connection.query(sql, 'xiaohu', (err, res) => {
  console.log('res', res)
})
image.png

二、通过连接池连接数据库

连接池原理

举个栗子:
没有连接池的时候,船家只有一条船,这一条船不断地送人过河。
有连接池之后,船家(连接池)有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)
  })
image.png

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)
})
image.png

你可能感兴趣的:(node连接mysql数据库(含方法封装))