如何使node.js MySQL连接池在启动时可用
我的showData.js脚本每次运行时都会调用
var pool = mysql.createPool({
是否有办法在node.js服务器启动时创建连接池?
我已尝试将createPool添加到server.js,但在调用时似乎无法从showData.js脚本访问该对象
pool.getConnection(function(err,connection){
node.js服务器启动时是否需要启动连接池?
MySQL连接池是否仍然存在即使在调用Connection.Release并且脚本关闭后也是如此?
编辑@marco,我收到ReferenceError:未定义池。我知道问题是我没有将池拉入showData.js。根据node.js的说法,可以多次加载一个模块。
发件人https://nodejs.org/api/modules.html
缓存
模块在第一次加载后被缓存。这 表示每个调用Require(‘foo’)都将获得 返回完全相同的对象,如果它将解析为相同的 文件。
对Required(‘foo’)的多个调用可能不会导致模块代码 被执行了多次。这是一个重要的特点。有了它, 可以返回"部分完成"的对象,从而允许可传递 即使依赖项会导致循环,也要加载它们。 如果您希望一个模块多次执行代码,则导出 函数,然后调用该函数。
这是我的最新设置:
lib/dbpool.js
var mysql = require('mysql');
var pool = mysql.createPool({
connectionLimit : 10,
host : 'someco.com',
user : 'pinco',
password : 'pallino'
});
module.exports = pool;
server.js
const pool = require('./lib/dbpool');
showData.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.ery实际执行:pool.getConnection(),然后是Connection.Query(),然后是Connection.Release()
相关文章