Node 连接 MySQL

安装驱动

Node 连接 MySQL 首先需要安装 MySQL 驱动

mysqljs/mysql

Node 连接 MySQL_第1张图片

npm install --save mysql

连接数据库

连接数据库的方式很简单

  • 初始化配置,获得连接实例
  • 调用实例的.connect()方法
  • 查询数据
  • 关闭连接
Node 连接 MySQL_第2张图片

代码如下:

const mysql = require('mysql'); // mysql node driver
const mysqlConfig = require('../secret/mysql.config');   // mysql配置文件
const console = require('tracer').colorConsole(); // 增强console

// 初始化数据库配置, mysql端口号默认为3306
const connection = mysql.createConnection({
    host: mysqlConfig.host,
    user: mysqlConfig.user,
    password: mysqlConfig.password,
    database: mysqlConfig.database,
});

// 连接数据库
connection.connect(function (err) {
    if (err) {
        console.error('error connecting: ', err);
    }
    console.debug('connected id is', connection.threadId);
});

connection.query('SELECT * FROM articles', function (err, results, fields) {
    if (err) {
        console.error(err);
    }
    console.debug('results', results);
});

connection.end();
Node 连接 MySQL_第3张图片
查询结果

为了安全性考虑,这里讲数据库的用户名和密码信息保存在单另的一个js文件里,如下:


Node 连接 MySQL_第4张图片

连接池

如果不想程序在查询数据时卡死或等待过长时间,一般不推荐在node中开启一个连接后全部查询都用这个链接并且不关闭,因为,你试了就知道为什么了

连接池是必要的,因为只用一个单连接操作数据库会出现一些问题,比如每次查询都要建立连接然后再关闭?建立连接和断开连接会有性能开销的,而且如果只有一个连接实例,并发的时候就傻了

所以连接池是非常必要的

建立连接池

建立连接池很简单,只需要将mysql.createConnection方法改为mysql.createPool方法即可,可以在初始化的时候加一个connectionLimit参数(一次创建的最大连接数。 (默认值:10))

const mysql = require('mysql'); // mysql node driver
const mysqlConfig = require('../secret/mysql.config');   // mysql配置文件
const console = require('tracer').colorConsole(); // 增强console

// 初始化数据库配置,建立连接池 mysql端口号默认为3306
const pool = mysql.createPool({
    connectionLimit: 10,    // 连接数量
    host: mysqlConfig.host,
    user: mysqlConfig.user,
    password: mysqlConfig.password,
    database: mysqlConfig.database,
});

// 直接使用 pool.query
pool.query('SELECT * FROM articles', function (err, results, fields) {
    if (err) {
        console.error(err);
        return;
    }
    console.debug('results', results);
});

// 通过 pool.getConnection 获得链接
pool.getConnection(function (err, connection) {
    if (err) {
        console.error(err);
        return;
    }
    connection.query('SELECT * FROM articles', function (err, results, fields) {
        if (err) {
            console.error(err);
            return;
        }
        console.debug('results', results);

        connection.release();   // 释放该链接,把该链接放回池里供其他人使用

        // connection.destroy();   // 如果要关闭连接并将其从池中删除,请改用connection.destroy()。该池将在下次需要时创建一个新的连接。
    });
});

查询的方式有两种:

  • 一种是简单的直接使用pool.query,这种方式的优点是简单,且可以自动回收connection

  • 另一种是使用pool.getConnection获得特定的connection,再进行查询

他们两的主要区别是:

参考文章:node.js中mysql连接池的使用

pool.getConnection获取到的connection在其回调函数中是一致的,可以保证系列查询在同一个connection上依次串行执行;pool.query每次调用则可能在不同的connection上执行查询

直接用 pool.query 每次都随机分配 connection。当有些操作需要保证是同一 connection 的时候,就独立使用 pool.getConnection吧

所以结论是,大部分时间用 pool.query 就行了,当有些操作需要保证是同一 connection 的时候,就独立使用 pool.getConnection

你可能感兴趣的:(Node 连接 MySQL)