无法使用节点服务器向我的 mariadb 数据库发出请求

Unable to make request to my mariadb database using node server

我目前正在学习如何设置节点服务器,并且我正在制作一个 API 来对 VPS 上托管的 MariaDB 数据库执行一些请求。

问题是,当我发出 POST 请求并向数据库发出 SQL 请求时,连接超时并且服务器关闭。

我尝试过使用所有权限向 MariaDB 添加新用户,我也尝试过使用 sequelize。

但是 none 这些解决方案有效,但每次我查询数据库时它仍然超时。

我可以连接到 phpmyadmin 并在上面发出一些请求,所以我认为我的数据库 运行 没问题。

这是我的代码:


router.post('/login', async function(req,res) {
    let conn;
    try {
        // establish a connection to MariaDB
        conn = await pool.getConnection();

        // create a new query
        var query = "select * from people";

        // execute the query and set the result to a new variable
        var rows = await conn.query(query);

        // return the results
        res.send(rows);
    } catch (err) {
        throw err;
    } finally {
        if (conn) return conn.release();
    }
})

我在 database.js 文件中连接到数据库的方式


const pool = mariadb.createPool({
    host: process.env.DATABASE_HOST,
    user: process.env.DATABASE_USER,
    password: process.env.DATABASE_PASSWORD,
    database: process.env.DATABSE_NAME,
});



// Connect and check for errors
module.exports={
    getConnection: function(){
        return new Promise(function(resolve,reject){
            pool.getConnection().then(function(connection){
                resolve(connection);
            }).catch(function(error){
                reject(error);
            });
        });
    }
}

module.exports = pool;

And my error:


Node.js v17.0.1
[nodemon] app crashed - waiting for file changes before starting...
[nodemon] restarting due to changes...
[nodemon] starting `node server.js`
Server started
/Users/alexlbr/WebstormProjects/AlloEirb/server/node_modules/mariadb/lib/misc/errors.js:61
  return new SqlError(msg, sql, fatal, info, sqlState, errno, additionalStack, addHeader);
         ^

SqlError: retrieve connection from pool timeout after 10001ms
    at Object.module.exports.createError (/Users/alexlbr/WebstormProjects/AlloEirb/server/node_modules/mariadb/lib/misc/errors.js:61:10)
    at timeoutTask (/Users/alexlbr/WebstormProjects/AlloEirb/server/node_modules/mariadb/lib/pool-base.js:319:16)
    at Timeout.rejectAndResetTimeout [as _onTimeout] (/Users/alexlbr/WebstormProjects/AlloEirb/server/node_modules/mariadb/lib/pool-base.js:342:5)
    at listOnTimeout (node:internal/timers:559:11)
    at processTimers (node:internal/timers:500:7) {
  text: 'retrieve connection from pool timeout after 10001ms',```

想到三种可能性:

  1. 数据库名称有错别字

    database: process.env.DATABSE_NAME

    database: process.env.DATABASE_NAME

  2. 您的环境变量设置不正确。您是否使用 dotenv.env 文件加载这些文件?

    https://www.npmjs.com/package/dotenv

如果不是,您如何在运行时设置 process.env 值?

  1. 如果确实设置了环境值:
  • 验证这些环境值是否正确
  • 验证您的 MariaDB 服务器正在侦听哪个接口: 服务器可能正在使用 bind-address 配置并且只监听 127.0.0.1(这是 Debian/Ubuntu 上的默认设置)
  • 您想确保服务器正在侦听:0.0.0.0(所有接口,不仅是本地主机)