我使用nodejs连接到SQL Server。但是我无法创建在所有查询之间共享的全局连接。在文档中,查询全部包装在连接回调函数中,这意味着每次查询时,我都必须建立连接。
是否有一种方法可以保持单个连接处于活动状态,以便可以与所有控制器共享该连接?我已经用mongodb完成了,不确定SQL Server如何做到这一点。
我做了这样的事情
connection.js :
const config = require('./config')
const sql = require('mssql')
const pool = sql.ConnectionPool(config).connect(function(err){
if(err) throw err;
console.log("connected");
});
module.exports = {
sql, pool
}
server.js :
const conn = require('./connection.js')
const requst = new conn.sql.Request(conn.pool)
request.query('select * from table', function (err, recordset){
if(err) console.log(err);
console.log(recordset);
});
由于连接已关闭而失败。
请分享您的一些见解,谢谢
答案 0 :(得分:1)
我在其中一个项目中使用了MSSQL,这是我所做的全局操作。
server.js :
const sql = require('mssql');
const config = require('./config');
sql.connect(config, (err) => {
if (err) return console.error(err);
console.log("SQL DATABASE CONNECTED");
});
SomeControllerFile :
const sql = require('mssql');
const request = new sql.Request();
request.multiple = true;
request.query('select * from table') => {
if(err){
return console.error(err);
}
return res.send(recordset)
});
希望这会有所帮助。
答案 1 :(得分:0)
您的第一种方法可以正常工作,但是您必须考虑connect()的异步特性。发生的事情是调用了connect,正在导出变量,然后您就可以使用它了-连接还没有完成。我会建议这样的修复程序:
const conn = require('./connection.js');
queryDatabase(conn.pool);
async function queryDatabase(pool_connection){
let pool = await pool_connection;
let request = new conn.sql.Request(pool);
request.query('select * from table', function (err, recordset){
if(err) console.log(err);
console.log(recordset);
});
}
在您的服务器js中。您可以等待连接器文件中的连接,但这首先破坏了具有非阻塞异步功能的目的。