在node-expess app中使用node-mysql建立共享连接

时间:2018-04-09 07:51:27

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

目前我没有在我的设置上使用连接池,因为我在应用程序中只有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!
    });
});

AND SO ON 同样适用于这些示例中省略的其他api资源。

此连接设计的缺点是什么?

1 个答案:

答案 0 :(得分:1)

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

  

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

并且来自同一doc

  

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

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

  

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

希望有帮助。