如何在启动时使node.js mysql连接池可用

mcm*_*son 1 javascript mysql connection-pooling node.js

每次运行我的showData.js脚本时都会调用它

var pool  = mysql.createPool({
Run Code Online (Sandbox Code Playgroud)

有没有办法在node.js服务器启动时创建连接池?

我已经尝试将createPool添加到server.js但是当我调用时,我似乎无法从我的showData.js脚本中访问该对象

pool.getConnection(function(err,connection){
Run Code Online (Sandbox Code Playgroud)

是否有必要在node.js服务器启动时启动连接池?

即使在调用connection.release并且脚本关闭后,mysql连接池是否仍然存在

编辑 @Marco,我得到了ReferenceError:池没有定义.我知道问题是我没有将池拉入showData.js.根据node.js,可以多次加载模块.

来自https://nodejs.org/api/modules.html

高速缓存

模块在第一次加载后进行缓存.这意味着(除其他外)每次调用require('foo')将获得完全相同的返回对象,如果它将解析为同一个文件.

多次调用require('foo')可能不会导致模块代码多次执行.这是一个重要的特征.有了它,就可以返回"部分完成"的对象,从而允许加载传递依赖,即使它们会导致循环.

如果要让模块多次执行代码,则导出一个函数,然后调用该函数.

这是我最新的设置:

LIB/dbpool.js

var mysql = require('mysql');
var pool  = mysql.createPool({
  connectionLimit : 10,
  host            : 'someco.com',
  user            : 'pinco',
  password        : 'pallino'
});

module.exports = pool;
Run Code Online (Sandbox Code Playgroud)

server.js

const pool = require('./lib/dbpool');
Run Code Online (Sandbox Code Playgroud)

showData.js

'use strict';
module.exports = router => {
    router.route('/show').post((req, res) => {
        pool.query('SELECT * FROM db.users', function(err, rows, fields) {
Run Code Online (Sandbox Code Playgroud)

我是否需要server.js和showData.js中的以下行?

const pool = require('./lib/dbpool');
Run Code Online (Sandbox Code Playgroud)

Mar*_*eri 7

使用以下内容定义名为lib/dbpool.js的模块:

var mysql = require('mysql');
var pool  = mysql.createPool({
  connectionLimit : 10,
  host            : 'someco.com',
  user            : 'pinco',
  password        : 'pallino'
});

module.exports = pool;
Run Code Online (Sandbox Code Playgroud)

在您的应用代码中,然后使用:

const pool = require('./lib/dbpool');

app.post('/your/app/url', (req, res) => {
  pool.query('your query', function(err, rows, fields) {
    if (err) throw err;
    /* Manage your results here */

  });
}
Run Code Online (Sandbox Code Playgroud)

pool.query实际执行:pool.getConnection()然后是connection.query()然后是connection.release()

  • 这是极好的信息。谢谢马可。我担心的是我的应用程序代码每分钟被调用数千次。每次创建 const 池时会发生什么?我担心的是,连接池可能应该在其他地方创建并保持打开状态。或者这是一个错误的关注点?在我看来, createPool 被不断调用,而我认为连接池应该打开一次并保持打开状态。 (3认同)