我正在使用nodejs-mssql
导出连接池。
const sql = require('mssql/msnodesqlv8');
const keys = require('../config/keys');
// const util = require('util')
//Need this package for windows authentication
let config;
console.log(keys)
if (keys.db.state.toLowerCase() == "dev") {
config = {
user: keys.db.dev_user,password: keys.db.dev_password,server: keys.db.dev_server,// You can use 'localhost\\instance' to connect to named instance
database: keys.db.dev_database,// driver:'msnodesqlv8',pool: {
max: 10,min: 5,idleTimeoutMillis: 30000
},options: {
encrypt: false,instanceName: keys.db.dev_instanceName,enableArithAbort: true
},// port:57909,enableArithAbort: false
}
}
console.log(config)
let connection = new sql.ConnectionPool(config).connect()
.then(query => {
return query
})
.catch(e => console.error("Database Trouble! ",e))
// pool.query = util.promisify(pool)
module.exports = connection;
我要使用此连接:
router.post('/search',async function (req,res) {
try{
let pool = await connection
await pool.query(`QUERY WITH SOME ERROR`)
}
catch(err){
console.log(err)
}
}
从上面您可以看到,当我运行其中有错误的查询时,错误消息并未包含有关查询源于我的代码的任何信息:
Trace: RequestError: Incorrect syntax near '2'.
at handleError (E:\TQA\node_modules\mssql\lib\msnodesqlv8\request.js:258:21)
at StreamEvents.emit (events.js:315:20)
at E:\TQA\node_modules\msnodesqlv8\lib\reader.js:37:20
at Array.forEach (<anonymous>)
at routeStatementError (E:\TQA\node_modules\msnodesqlv8\lib\reader.js:30:14)
at E:\TQA\node_modules\msnodesqlv8\lib\reader.js:299:13
at E:\TQA\node_modules\msnodesqlv8\lib\driver.js:177:13
at E:\TQA\node_modules\msnodesqlv8\lib\driver.js:157:13 {
code: 'EREQUEST',originalError: [Error: [microsoft][SQL Server Native Client 11.0][SQL Server]Incorrect syntax near '2'.] {
sqlstate: '42000',code: 102
},number: 102,state: '42000'
}
我知道我可以在有console.log(err)的任何地方添加console.trace(error.lineNumber),但是我打算将err
存储在数据库中,并且我希望err
包含该信息。
我最近从mysql切换到mssql,并且mysql软件包显示了有关该错误的所有信息。