我在用node.js连接mssql,用的node-mssql,用下面方法进行封装,单条测试没有问题,但是进行连续插入时,只有最后一个能够正常插入,错误提示:Connection is closed. 查了半天,发现这种写法是官方文档上写的Quick Example with one global connection,这样是只建立了一个全局连接,前面没有操作完成,就被后面的连接打断了,所以出错?但此库的连接配置中又提供了pool的配置!我错在哪里,该如何做呢?谢谢!
var mssql = require('mssql'); var options = { server: config.server, port: config.port, user: config.user, password: config.password, database: config.database, pool: { max: 10, min: 2, idleTimeoutMillis: 30000 } } ... function query(sql,params){ return new Promise(function(fulfill, reject) { mssql.connect(options, function(err) { console.dir(arguments) if(err){ reject({err:err.message}) logger.error(err.message) }else{ let sqlReq = new mssql.Request(); if(params){ let ps = Object.keys(params); for(let i = 0; i < ps.length; i++){ sqlReq.input(ps[i],params[ps[i]]) } } sqlReq.query(sql, function(error, result) { if (error) { reject({err:error.message}); logger.error(error.message + ' Sql is : ' + sql) } else { fulfill(result); logger.debug(sql) } }); } }); });
已经解决了,node-mssql上的文档不全,仔细看官文文档,new sql.Connection时有一个返回参数,这个参数作为new sql.request()参数,就好了!
文档地址:http://csdoc.org/
为什么文档不一致,真坑人,折腾了一个下午!