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

标签 node.js sql-server npm

我正在创建一个应用程序,它将在 Node js 中通过 Udp 协议(protocol)进行通信。此外,我正在使用 sql server 作为数据库,因此为了连接此数据库,我正在使用 mssql npm library。基本上我在做什么,我有一个单独的 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;

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

最佳答案

你可以:

  • 将实例传递到每个路由器并在设置它们时在那里使用它
  • 将该实例设置为您的 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);

然后您可以使用以下方法检索实例:

const sql = await require('./database.js');

关于node.js - 在整个应用程序中使用单个数据库连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52584646/

相关文章:

sql-server - 通过声明枚举会导致 HttpException SqlException

javascript - Express 服务器基本示例不起作用

node.js - 我可以使用 karma 来测试拖放之类的页面交互吗?

node.js - Node JS body-parser 获取 rawBody 和 body

c# - 允许空值时如何将 nvarchar(x) 读入 String?

mysql - 在 MSSQL IN 子句中使用复杂键

npm - 如何在不更新其他软件包的情况下 `yarn add`?

reactjs - 范围错误 : Invalid typed array length: -4095 when running my react web app

node.js - 如何解决 d3-array/src/number.js : unknown Statement of type "ForOfStatement" 语法错误

node.js - 为什么 compareSync 不需要 salt 字符串?