在整个应用程序中使用单个数据库连接?

pra*_*nde 5 sql-server node.js npm

我正在创建一个将在 Node js 中通过 Udp 协议进行通信的应用程序。另外,我使用 sql server 作为数据库,因此为了连接该数据库,我使用mssqlnpm 库。基本上我正在做的事情是我有一个单独的 dbcon 模块,如下所示

const sql = require('mssql')
const config = {
    user: 'sa',
    password: '123',
    server: '192.168.1.164', // You can use 'localhost\\instance' to connect to named instance
    database: 'SBM-EMCURE',

    options: {
        encrypt: false // Use this if you're on Windows Azure
    }
}
 sql.connect(config, err => {

 })

sql.on('error', err => {
    console.log('error on sql.on()');
})
module.exports.sql = sql;
Run Code Online (Sandbox Code Playgroud)

我正在使用这个导出的 sql 对象在 dbcon 模块之外运行查询,但有时它会给我带来不同的行为,例如在数据库连接之前执行查询,有没有办法为整个应用程序使用单个数据库连接?使用单个数据库连接很有用,否则会减慢我的进程
提前致谢

小智 2

你可以:

  • 将实例传递到每个路由器并在设置它们时在其中使用它
  • 将实例设置为对象的属性,并从中间件函数或在中间件函数内app访问它req.app.sqlres.app.sql
  • 将实例设置为全局对象的属性并从任何地方访问它(但这通常不是最佳实践)

此外,在您的示例代码中,您通过调用 来启动连接sql.connect(),但在连接完成时不会为其提供回调。这导致它被立即导出并可能在实际建立连接之前被查询。做这个:

const util = require('util');
const sql = require('mssql');

const config = {
    user: 'sa',
    password: '123',
    server: '192.168.1.164', 
    database: 'SBM-EMCURE',

    options: {
        encrypt: false 
    }
};

module.exports = util.promisify(sql.connect)(config);
Run Code Online (Sandbox Code Playgroud)

然后您可以使用以下命令检索实例:

const sql = await require('./database.js');
Run Code Online (Sandbox Code Playgroud)