You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 21:25:29