gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 23:15:04 25 4
gpt4 key购买 nike

我正在创建一个应用程序,它将在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com