【问题标题】:Establishing shared connection using node-mysql in node-expess app在 node-express 应用程序中使用 node-mysql 建立共享连接
【发布时间】:2018-04-09 07:51:27
【问题描述】:

目前我没有在我的设置中使用连接池,因为我的应用程序中只有 1-4 个用户。

根据doc,这是推荐的方式。

var mysql      = require('mysql');
var connection = mysql.createConnection({
  host     : 'example.org',
  user     : 'bob',
  password : 'secret'
});

connection.connect(function(err) {
  if (err) {
    console.error('error connecting: ' + err.stack);
    return;
  }

  console.log('connected as id ' + connection.threadId);
});

现在,我所做的是导出连接对象并将其共享给其他 api 资源。

关于 db.js 文件

var mysql      = require('mysql');
var connection = mysql.createConnection({ ... });

module.exports = connection;

关于 api.js 文件

const express = require('express');
const router = express.Router();

const conn = require('./db');

router.post('/create', function (req, res) {
    connection.query('INSERT ...', function (error, results, fields) {
        if (error) throw error;
        // connected!
    });
});


router.post('/update', function (req, res) {
    connection.query('UPDATE SET ...', function (error, results, fields) {
        if (error) throw error;
        // connected!
    });
});

等等同样适用于这些示例中省略的其他 api 资源..

这种连接设计有什么缺点?

【问题讨论】:

    标签: javascript mysql node.js express node-mysql


    【解决方案1】:

    如果我错了,请纠正我。我认为,即使您导出了连接对象,您仍然在一个一个地管理连接。

    为每个用户打开和维护数据库连接,尤其是对动态数据库驱动的网站应用程序的请求,成本高昂且浪费资源 Wikipedia

    来自同一个doc

    这是因为对 pool.query() 的两次调用可能使用两个不同的连接并并行运行

    所以最好的方法是使用池来管理连接

    连接是由池延迟创建的。如果您将池配置为最多允许 100 个连接,但只同时使用 5 个,则只会建立 5 个连接。连接也是循环的循环方式,连接从池的顶部取出并返回到底部。

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 2015-02-13
      • 2013-09-15
      • 2019-06-15
      • 2017-12-31
      • 1970-01-01
      • 2017-06-12
      • 2014-02-23
      • 2019-09-04
      • 2019-07-17
      相关资源
      最近更新 更多