javascript - NPM MSSQL - 错误 : uncaughtException: Cannot read property 'release' of null

标签 javascript sql-server node.js npm

我正在尝试使用 npm mssql 连接到 mssql 服务器模块。我收到下面提到的错误,我试图搜索它,但除了少数用户已经在 GitHub 上报告它之外,找不到任何有用的信息没有任何成功。

error: uncaughtException: Cannot read property 'release' of null date=Sat Jul 15 2017 02:03:59 GMT+0000 (UTC), pid=10150, uid=1000, gid=1000, cwd=/home/ubuntu/server/gcap-server-exp, execPath=/usr/bin/nodejs, version=v6.11.1, argv=[/usr/bin/nodejs, /usr/lib/node_modules/pm2/lib/ProcessContainerFork.js], rss=70537216, heapTotal=47235072, heapUsed=35834656, external=18214141, loadavg=[0.14794921875, 0.10498046875, 0.02880859375], uptime=2206463
TypeError: Cannot read property 'release' of null
    at ConnectionPool.release (/home/ubuntu/server/gcap-server-exp/node_modules/atpl-models/node_modules/mssql/lib/base.js:199:14)
    at Request.tds.Request.err [as userCallback] (/home/ubuntu/server/gcap-server-exp/node_modules/atpl-models/node_modules/mssql/lib/tedious.js:892:25)
    at Request._this.callback (/home/ubuntu/server/gcap-server-exp/node_modules/atpl-models/node_modules/tedious/lib/request.js:47:27)
    at Connection.message (/home/ubuntu/server/gcap-server-exp/node_modules/atpl-models/node_modules/tedious/lib/connection.js:1401:27)
    at Connection.dispatchEvent (/home/ubuntu/server/gcap-server-exp/node_modules/atpl-models/node_modules/tedious/lib/connection.js:687:45)
    at MessageIO.<anonymous> (/home/ubuntu/server/gcap-server-exp/node_modules/atpl-models/node_modules/tedious/lib/connection.js:602:18)
    at emitNone (events.js:86:13)
    at MessageIO.emit (events.js:185:7)
    at ReadablePacketStream.<anonymous> (/home/ubuntu/server/gcap-server-exp/node_modules/atpl-models/node_modules/tedious/lib/message-io.js:102:16)
    at emitOne (events.js:96:13)

我创建连接和执行程序的代码如下-

sql.close()
sql.connect(sqlConfig).then(pool => {
  return pool.request()
    .input('input', sql.NVarChar, input_value)
    .execute('someProcedure').then(result => {
      result.recordsets.forEach(record => {
        record.forEach(recordChild => {
         // Do something about the recordChild ...
        })
      })
    }, err => {
      // Log err
      console.log(err)
    }).catch(err => {
      // ... error checks 
      console.log(err)
    })
})

上面的sqlConfig参数是-

sqlConfig = {
  user: 'username',
  password: '******',
  server: 'xxx.xxx.xxx.xxx',
  database: 'database',
  pool: {
    max: 10,
    min: 0,
    idleTimeoutMillis: 30000
  }
}

最佳答案

我遇到了同样的问题,下面是我必须采取的措施来避免该错误。

这是我获取数据库连接的函数:

async function connectToDb() {
    const pool = await new sql.ConnectionPool(connectionConfig).connect();
    return pool;
}

这是执行查询的函数:

async function someDatabaseFunction(args, done) {
    let pool;
    let ps;

    try {
        pool = await connectToDb();
        ps = new sql.PreparedStatement(pool);
        ps.input('input1', sql.VarChar(10));

        const sqlStr = 'my query goes here';

        await ps.prepare(sqlStr);
        const result = await ps.execute({ groupId: args.groupId, status: args.status });

        done(null, result);
    } catch (error) {
        done(error);
    } finally {
        if (ps) await ps.unprepare();
        if (pool) pool.close();
    }
}

我的问题是在 finally block 中我调用了 ps.unprepare() 但没有 await 该函数。我直接转到 pool.close() 函数。 awaiting ps.unprepare 为我消除了错误。

我不确定它是否适用于您的情况,但它可以,因为您在 sql.connect 之前调用了一个 sql.close() .可能是您在空值上调用 sql.close,这就是产生的错误。

关于javascript - NPM MSSQL - 错误 : uncaughtException: Cannot read property 'release' of null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45113824/

相关文章:

javascript - 将 javascript 中的数组更改为更简单的对象

javascript - 更改内联 CSS 样式

javascript - 如何在tinyMCE.inittiny mce中使用变量?

javascript - Cubism 自己的数据源问题

sql-server - 查询(SQL Server 2008 Express)在 SQL Server Management Studio 中有效,但在使用 ADODB 的 Delphi 中无效

.net - 通过 SSIS 目录管理对象模型以编程方式验证 SSIS 2012 包

javascript - 从node-imap接收数据时如何检查字符串是否是base64编码的

arrays - 具有 2 个(或更多)模式类型的 mongoose 数组

sql-server - SQL 2008R2 中的 DateTimeOffset 示例

javascript - CoffeeScript 中的客户端依赖管理