【问题标题】:NodeJs program not exiting after completionNodeJs程序完成后不退出
【发布时间】:2020-05-23 18:29:56
【问题描述】:

抱歉这个菜鸟问题,我是 Javascript 的初学者。我正在使用 NodeJs MySQL 包将我的节点应用程序连接到我的数据库。但是在成功运行查询后,程序不会退出它永远停留在那里,直到我手动终止它。我希望程序运行查询并退出程序。

我正在使用的代码:

var mysql = require("mysql");

var pool = mysql.createPool({
    connectionLimit: 100,
    host: "Hostname",
    user: "User",
    password: "Password",
    database: "DB_name",
    debug: false,
});

function sql_query() {
    pool.getConnection(function (err, connection) {
        if (err) {
            console.log(err.code + ' : '+ err.sqlMessage);
            return;
        }

        var query = "MY-QUERY_STRING";

        connection.query(query, (error, results, fields) => {

            connection.release();

            if (error) {
                console.log(error);
                return;
            }

            console.log("Done");
            return results;
        });
    });
}

var result = sql_query();
console.log(result);

【问题讨论】:

    标签: javascript mysql node.js


    【解决方案1】:

    您必须关闭 MySQL 连接才能退出程序。通过在成功块中使用以下代码,您将退出程序。

    pool.end(function(err) {
      if (err) {
        return console.log('error:' + err.message);
      }
      console.log('Close the database connection.');
    });
    

    【讨论】:

      【解决方案2】:

      只要你的池是打开的,节点进程就不会退出。检查this了解更多详情。 如果您想在执行一个查询后关闭您的池,您可以执行以下操作:

      ...
      connection.query(query, (error, results, fields) => {
                  pool.end(); // you can pass a callback here as well to handle errors
                  ...
      });
      ...
      

      另请注意,您正在尝试将sql_query 的结果分配给result。这不起作用,因为您不能以这种方式从回调中返回值。详情请查看this。

      【讨论】:

        【解决方案3】:

        您必须关闭与 pool.end() 的连接,在您的情况下,您希望它在返回 results 之前关闭。

                connection.query(query, (error, results, fields) => {
        
                    connection.release();
        
                    if (error) {
                        console.log(error);
                        return;
                    }
        
                    console.log("Done");
                    pool.end()
                    return results;
                });
        

        【讨论】:

          猜你喜欢
          • 2011-01-25
          • 1970-01-01
          • 1970-01-01
          • 2014-01-26
          • 1970-01-01
          • 2018-12-07
          • 1970-01-01
          • 2021-12-21
          相关资源
          最近更新 更多