Node.js MSSQL全局连接

时间:2018-09-20 22:47:12

标签: node.js sql-server

我使用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);
});

由于连接已关闭而失败。

请分享您的一些见解,谢谢

2 个答案:

答案 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中。您可以等待连接器文件中的连接,但这首先破坏了具有非阻塞异步功能的目的。