Node.js导出MariaDB连接池时出现超时错误的原因及解决
MariaDB连接池导出后调用超时问题
原问题
正在学习Node.js和Express,遇到一个问题:将MariaDB数据库连接池放在单独文件中通过module.exports导出后,在另一个文件使用时出现超时错误,无法执行数据库查询。但把相同代码放到同一个文件里,查询就能正常运行,怀疑是module.exports = pool的过程出了问题,是不是遗漏了什么?
涉及文件代码
index.js
// import express web framework const express = require("express"); //create an express application const app = express(); const pool = require('./database/connection') const cors = require('cors'); //middleware app.use(cors()) app.use(express.json()) getData = async () => { data = await pool.query("call stored_procedure") console.log (data) } getData() app.listen(3001, () => { console.log('Serving running on port 3001') })
connection.js
//import mariadb library const mariadb = require("mariadb") //function that create mariadb connection pool for database const createPool = () => { try { return ( mariadb.createPool({ connectionLimit: 10, host: process.env.MARIADB_HOST, user: process.env.MARIADB_USER, password: process.env.MARIADB_PASSWORD, database: process.env.MARIADB_DB, port: 3306 }) ) } catch (err) { console.error('Failed to connect to database: ') console.error(err) } } const pool = createPool() //export database connection pool module.exports = pool
运行错误信息
path_to_dir/node_modules/mariadb/lib/misc/errors.js:57 return new SqlError(msg, sql, fatal, info, sqlState, errno, additionalStack, addHeader); ^ SqlError: (conn=-1, no: 45028, SQLState: HY000) retrieve connection from pool timeout after 10001ms (pool connections: active=0 idle=0 limit=10) at Object.module.exports.createError (path_to_dir/node_modules/mariadb/lib/misc/errors.js:57:10) at Pool._requestTimeoutHandler (path_to_dir/node_modules/mariadb/lib/pool.js:345:26) at listOnTimeout (node:internal/timers:557:17) at processTimers (node:internal/timers:500:7) { text: 'retrieve connection from pool timeout after 10001ms\n' + ' (pool connections: active=0 idle=0 limit=10)', sql: null, fatal: false, errno: 45028, sqlState: 'HY000', code: 'ER_GET_CONNECTION_TIMEOUT' }
问题原因与解决方法
- 错误根源:connection.js文件中未添加
require("dotenv").config();。缺少这行代码时,数据库无法读取连接配置信息,最终导致连接超时失败。 - 排查过程:查阅MariaDB Node.js连接器的更新日志后,发现该工具存在错误信息不充分的问题(有时仅提示“超时”,无更多细节),调整排查方向后定位到问题。
- 提示:若遇到类似超时错误,可能涉及多种问题,请全面检查代码的各个部分!
内容的提问来源于stack exchange,提问作者realisticDounut
相关产品推荐
相关产品推荐

