【发布时间】:2017-05-28 18:29:02
【问题描述】:
每次运行我的 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. 我知道问题是我没有将 pool 拉入 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;
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');
【问题讨论】:
-
如果server.js中不需要pool,可以只在showData.js中导入模块。如果两者都需要,可以在两个文件中添加“require”。
标签: javascript mysql node.js connection-pooling