Node 连接 MySQL

作者: waka | 来源:发表于2017-06-07 10:44 被阅读308次

    安装驱动

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

    mysqljs/mysql

    npm install --save mysql
    

    连接数据库

    连接数据库的方式很简单

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

    代码如下:

    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();
    
    查询结果

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


    连接池

    如果不想程序在查询数据时卡死或等待过长时间,一般不推荐在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

    相关文章

      网友评论

      • 元气满满321:为什么要用连接池呢
        元气满满321:@waka 懂了,谢谢啦
        waka:@鱼娟note 因为连接池可以并发链接数据库,链接数据库其实也是一个网络操作;如果只有一个连接,并发量大的时候就只能排队了,会严重影响性能

      本文标题:Node 连接 MySQL

      本文链接:https://www.haomeiwen.com/subject/iqeofxtx.html