[英]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.