2017-07-15 52 views
1

我試圖使用npm mssql模塊連接到mssql服務器。我收到下面提到的錯誤,我試圖搜索它,除了少數用戶已經在GitHub上報告它沒有任何成功之外,找不到任何有用的信息。NPM MSSQL - 錯誤:uncaughtException:無法讀取null的屬性'release'

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 
    } 
} 
+0

看起來像這個錯誤是當你釋放mssql連接時... –

+0

是的,它是正確的錯誤是當釋放連接,但是沒有mannual代碼釋放連接時,你使用mssql模塊它做同樣的它自己的。 – Jeet

+0

順便說一句你在哪裏發佈連接在你的代碼.. –

回答

1
我有同樣的問題,這裏

的我必須做什麼來避免錯誤。

這裏是我的函數獲取到數據庫的連接:

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塊我打電話ps.unprepare()但沒有await那功能。我正要去pool.close()函數。 await ing ps.unprepare擺脫了我的錯誤。

我不確定它是否適用於您的情況,但它可以,因爲您在sql.connect之前調用了sql.close()。可能是因爲您在空值上調用sql.close,這是由此產生的錯誤。

+0

是的,它應該是這樣,我最近已經知道了,謝謝你的回答。 – Jeet

相關問題