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