节点js - 如何使用连接变量

时间:2017-10-31 18:36:15

标签: javascript sql-server node.js express

我正在尝试创建一个允许多数据库连接的数据库连接结构,但是我遇到了保存连接的问题,因此我可以在mssql.request()中使用。

我登录表单时用户必须选择要使用的数据库,所以我在考虑使用此代码触发选择框数据库。

LoginController.js

setDB: (req, res) =>
  {
    var connection = db.setDB(req.params.dbname);
    connection.then(result => {
      res.send(result);
    });
  },

db.setDB

const mssql = require('mssql');

module.exports =
{
  setDB: (req, res) =>
  {
    console.log('Prepare to connect to ' + req);
    return new Promise(function (resolve, reject){
      var result = makeConnection(req);
      result.then(value => {
        console.log('result: ' + value);
        if(value == 0)
        {
          console.log('Unknown database!');
          resolve('Unknown database!');
        }
        else if(value == 1)
        {
          console.log('Error trying to connect! Maybe wrong connection data.');
          resolve('Error trying to connect! Maybe wrong connection data.');
        }
        else if(value == 2)
        {
          console.log('Connection Done!');
          resolve('Connection Done!');
        }
      }).catch(err => {
        console.log(err);
        console.log('Error handle setDB() results.');
        reject('Error handle setDB() results! Call tech guy.');
      });
    })


    //return connection;
  }
}

function makeConnection(dbname)
{

  return new Promise(function (resolve, reject){
    console.log('Start connection....');
    const configs = {
      Emp1: {
        user: "us",
        password: "pass",
        server: "ip",
        database: "Emp1",
        pool: {
          max: 20,
          min: 0,
          idleTimeoutMillis: 900000
        }
      },
      Emp2: {
        user: "us",
        password: "pass",
        server: "ip",
        database: "Emp2",
        pool: {
          max: 20,
          min: 0,
          idleTimeoutMillis: 900000
        }
       }
     };

     var config = configs[dbname];
     if(config == undefined)
     {
       resolve(0);
     }

      global.conn = new mssql.Connection(config);
      conn.connect(function(err)
      {
        if (err) {
          console.log(err);
          resolve(1);
        } else {
          console.log('Database Connected!');
          resolve(2);
        }
      });

  });

}

我执行此操作global.conn = new mssql.Connection(config);以尝试保存连接。

现在,如果我尝试访问执行查询的链接(索引),我会收到错误,因为conn is not defined ...

var db = require('../config/db');
var mssql = require('mssql');
var squel = require("squel");
var request = new mssql.Request(conn);
module.exports =
{
  index: (req, res) => {
    console.log("User Index");


    request.query("SELECT * from us",(err, records) => {
      console.log(err);
      //console.log(records);
      res.send(records[0].username);
    });

  }
}

我很欣赏你对更好的方法这么做的看法,我没有看到很多关于多数据库连接的信息。 用户必须在登录表单中选择数据库但是在我必须保存数据库名称之后却如何?我已经在缓存中思考......我不知道,我真的需要一些建议。

对此有任何疑问请问我。

谢谢

0 个答案:

没有答案