我正在创建一个将通过节点js中的Udp协议进行通信的应用程序。另外,我正在使用sql server作为数据库,因此为了连接该数据库,我正在使用mssql
npm liabrary。基本上我在做什么,我有一个单独的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模块外部运行查询,但有时会给我不同的行为,例如在执行数据库连接之前执行查询,是否有任何方法可以对整个应用程序使用单个数据库连接?使用单个数据库连接很有用,否则会减慢我的进程
预先感谢
答案 0 :(得分:2)
您可以:
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');
答案 1 :(得分:1)
首先,您应该创建文件database.js
:
var mysql = require('mysql');
var connection = mysql.createConnection({
host : '127.0.0.1',
user : 'root',
password : '',
database : 'event'
});
connection.connect(function(err) {
if (err) throw err;
});
module.exports = connection;
然后,您可以在server.js
或任何其他文件中使用此连接。
var express = require('express');
var app = express();
var dbcon = require('./database');
app.get('/getEvent',function(req,res){
dbcon.query('SELECT * FROM eventinfo',function(err, result) {
if (err) throw err;
});
});
app.listen(3000);