Node.js Node js sql-节点程序不';t出口

Node.js Node js sql-节点程序不';t出口,node.js,Node.js,我是NodeJS的新手。我知道如果有任何回调或事件仍然挂起,节点将等待事件循环。我已经编写了一个连接数据库和获取数据的代码。即使在读取数据之后,节点也不会退出 var sql = require("mssql"); var config = { user: 'data', password: 'abc@123', server: 'localhost', database: 'master' }; sql.connect(config, function (e

我是NodeJS的新手。我知道如果有任何回调或事件仍然挂起,节点将等待事件循环。我已经编写了一个连接数据库和获取数据的代码。即使在读取数据之后,节点也不会退出

var sql = require("mssql");
var config = {
    user: 'data',
    password: 'abc@123',
    server: 'localhost', 
    database: 'master' 
};
sql.connect(config, function (err) {
    var request = new sql.Request();
    var i;
    request.query('GetData').then(
        ri=>{
          console.log(ri.recordset.map(o=>o.Key));
        })

})

有人能告诉我为什么会发生这种情况吗?

您可以在查询完成后关闭连接,这将允许流程退出:

var sql = require("mssql");
var config = {
    user: 'data',
    password: 'abc@123',
    server: 'localhost', 
    database: 'master' 
};

sql.connect(config).then(pool => {
    var request = new sql.Request();
    request.query('GetData;').then(ri => {
        console.log(ri.recordset.map(o => o.Key));
        // Close the pool now we're done with it...
        pool.close();
    });
}).catch (err => {
    console.error("An error occurred:", err);
});

您可以在查询完成后关闭连接,这将允许进程退出:

var sql = require("mssql");
var config = {
    user: 'data',
    password: 'abc@123',
    server: 'localhost', 
    database: 'master' 
};

sql.connect(config).then(pool => {
    var request = new sql.Request();
    request.query('GetData;').then(ri => {
        console.log(ri.recordset.map(o => o.Key));
        // Close the pool now we're done with it...
        pool.close();
    });
}).catch (err => {
    console.error("An error occurred:", err);
});

节点未关闭,因为sql.connext创建了一个活动连接,因此在节点眼中,事件侦听器已注册。可能try sql.close()节点没有关闭,因为sql.connext创建了一个活动连接,所以在节点看来,事件侦听器是注册的。也许可以试试sql.close()