我使用nodejs连接到Server。但是,我未能创建一个在所有查询之间共享的全局连接。在文档中,查询都封装在连接回调函数中,这意味着每次我进行查询时,都必须建立一个连接。
是否有一种方法使单个连接保持活动,以便与所有控制器共享它?我在mongodb上做过,不知道Server是如何做到这一点的。
我做了这样的事
connection.js
const config = require('./config')
const sql = require('mssql')
const pool = sql.ConnectionPool(config).connect(function(err){
if(err) throw err;
console.log("connected");
});
module.exports = {
sql, pool
}server.js
const conn = require('./connection.js')
const requst = new conn.sql.Request(conn.pool)
request.query('select * from table', function (err, recordset){
if(err) console.log(err);
console.log(recordset);
});它失败了,因为连接已关闭。
请分享你的一些见解,谢谢
发布于 2018-09-21 07:02:26
我在我的一个项目中使用了MSSQL,在全局运行它--这就是我所做的。
server.js
const sql = require('mssql');
const config = require('./config');
sql.connect(config, (err) => {
if (err) return console.error(err);
console.log("SQL DATABASE CONNECTED");
});SomeControllerFile
const sql = require('mssql');
const request = new sql.Request();
request.multiple = true;
request.query('select * from table') => {
if(err){
return console.error(err);
}
return res.send(recordset)
});希望这能有所帮助。
发布于 2019-07-30 19:16:18
第一种方法可以正常工作,但您必须考虑connect()的异步特性。正在发生的事情是,连接被调用,变量被导出,然后你去使用它--它没有完成连接。我推荐这样的解决办法:
const conn = require('./connection.js');
queryDatabase(conn.pool);
async function queryDatabase(pool_connection){
let pool = await pool_connection;
let request = new conn.sql.Request(pool);
request.query('select * from table', function (err, recordset){
if(err) console.log(err);
console.log(recordset);
});
} 在你的服务器js里。您可以等待连接器文件中的连接,但这就违背了具有非阻塞异步功能的目的。
https://stackoverflow.com/questions/52434352
复制相似问题