繁体   English   中英

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

[英]How to make node.js mysql connection pooling available on startup

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

var pool  = mysql.createPool({

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

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

pool.getConnection(function(err,connection){

甚至有必要在 node.js 服务器启动时启动连接池吗?

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

编辑@Marco,我收到ReferenceError: pool is not defined。 我知道问题在于我没有将池拉入 showData.js。 根据 node.js,多次加载一个模块是可以的。

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

缓存

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

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

如果你想让一个模块多次执行代码,那么导出一个函数,然后调用那个函数。

这是我的最新设置:

库/dbpool.js

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

module.exports = pool;

服务器.js

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

显示数据.js

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

在 server.js 和 showData.js 中都需要以下行吗?

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

定义一个名为 lib/dbpool.js 的模块,内容如下:

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

module.exports = pool;

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

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 */

  });
}

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

这个解决方案使用一个变量来保存池并在第一次初始化后返回它,

 const mysql = require("mysql2/promise"); var pool; module.exports = function getPool() { if (!pool) { const config = { connectionLimit: 100, host: process.env.SQL_HOST, user: process.env.SQL_USER, password: process.env.SQL_PASSWORD, database: process.env.SQL_DATABASE, debug:false, waitForConnections: true, multipleStatements: true }; pool = mysql.createPool(config); } return pool; };

 const getPool = require('./db.js'); async function handleREquest(req, res) { const result = getPool().query('...'); //... }

基于此 Github 代码的代码:此处

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM