sql-server – 如何在Express 4 Web应用程序中跨多个路由使用单个mssql连接池?

我想在Node JS Express 4 Web应用程序中使用 node-mssql作为MSsql数据库连接器.路由处理程序逻辑在单独的文件中处理.

如何创建单个/全局连接池并将其用于处理路由逻辑的多个文件?我不想在每个路由处理函数/文件中创建一个新的连接池.

解决方法

实际上我问这个问题是自己回答的,因为我相信我有一个值得分享的答案,而我在其他地方找不到文件化的解决方案.另外在几个问题( #118,#164,#165)在node-mssql中讨论了这个话题.

这是我的解决方案:

在server.js中

var express = require('express');
var sql     = require('mssql');
var config  = {/*...*/};
//instantiate a connection pool
var cp      = new sql.Connection(config); //cp = connection pool
//require route handlers and use the same connection pool everywhere
var set1    = require('./routes/set1')(cp);
var set2    = require('./routes/set2')(cp);

//generic express stuff
var app = express();

//...
app.get('/path1',set1.get);
app.get('/path2',set2.get);

//connect the pool and start the web server when done
cp.connect().then(function() {
  console.log('Connection pool open for duty');

  var server = app.listen(3000,function () {

    var host = server.address().address;
    var port = server.address().port;

    console.log('Example app listening at http://%s:%s',host,port);

  });
}).catch(function(err) {
  console.error('Error creating connection pool',err);
});

在routes / set1.js

var sql     = require('mssql');

module.exports = function(cp) {
  var me = {
    get: function(req,res,next) {
      var request = new sql.Request(cp);
      request.query('select * from test',function(err,recordset) {
        if (err) {
          console.error(err);
          res.status(500).send(err.message);
          return;
        }
        res.status(200).json(recordset);
      });
    }
  };

  return me;
};

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 'EastRiver' 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...