【问题标题】:Unable to make request to my mariadb database using node server无法使用节点服务器向我的 mariadb 数据库发出请求
【发布时间】:2021-11-27 07:42:54
【问题描述】:

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

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

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

但是这些解决方案都不起作用,每次我查询我的数据库时它仍然超时。

我可以连接到 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',```

【问题讨论】:

    标签: javascript mysql sql node.js mariadb


    【解决方案1】:

    想到三种可能性:

    1. 数据库名称中有一个错字

      数据库:process.env.DATABSE_NAME

      数据库: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(所有接口,不仅是本地主机)

    【讨论】:

    • 错字不正确,你是对的,但问题不存在,是绑定地址只听本地主机,我改变了它,现在它可以工作了,非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2015-09-21
    • 2016-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-15
    • 2018-01-26
    相关资源
    最近更新 更多