Javascript Node js-如何使用require传递参数

Javascript Node js-如何使用require传递参数,javascript,sql-server,node.js,Javascript,Sql Server,Node.js,在控制器中,我需要配置/db,但我需要发送一个带有数据库名称的参数,因为我可以有多个数据库 所以在控制器中,我这样做: "use strict"; var connection = require('../config/db', function(db) { var db = "Emp1"; }); var connection = require('../config/db'); var mssql = require('mssql'); var request = new mss

在控制器中,我需要配置/db,但我需要发送一个带有数据库名称的参数,因为我可以有多个数据库

所以在控制器中,我这样做:

    "use strict";
var connection = require('../config/db', function(db)
{
  var db = "Emp1";
});
var connection = require('../config/db');
var mssql = require('mssql');
var request = new mssql.Request(connection);
var parser = require('json-parser');
var squel = require("squel");

class RecpetionController
{
  init(app)
  {
    app.get("/", (req, res) => this.index.call(this, req, res));
  }

  index(req, res)
  {
    console.log('Index reception')
  }

}
module.exports = RecpetionController;
在config/db中,我有:

    var mssql = require("mssql");

console.log('DATABASE');

 if(db == 'Emp1')
 {
   var config =
   {
     user: "user",
     password: "pass",
     server: "ip",
     database: "Emp1"
   }
 }
 else if(db == 'Emp2')
 {
   var config =
   {
     user: "user",
     password: "pass",
     server: "ip",
     database: "Emp2"
   }
 }

 var connection = new mssql.Connection(config);

 connection.connect(function(err)
 {
     console.log(err);
 });

 module.exports = connection;
那么我是以正确的方式传递来自控制器的值

如何接收config/db中的值

如果在config/db I console.logarguments中,它不会显示任何具有db值的字段

我怎样才能解决这个问题

在config/db中使用节点缓存获取db名称是更好的方法吗


谢谢你

不行。因此,您可以让config/db返回连接的工厂,而不是连接。旧式的节点回调方式看起来像这样这是概念性的,并不意味着完美:

…然后像这样使用它:

var connection = require('../config/db')('Emp1', function(err, connection) {
    // Use `err` and `connection` here
});
或者,您可以将创建连接与连接调用分开,让使用连接的模块进行连接。有很多方法可以解决这个问题

更现代的API将使用承诺,以实现其自身的目的,并支持使用async/await:

然后

在上文中,我一直使用ES5语法,如果您使用的是非常旧版本的Node,那么模块可以提供语法承诺,因为您的代码目前似乎避免使用ES2015+功能

最后:我建议更改您的配置选择以使用对象或映射:

然后


甚至可以从文件中加载它们…

非常感谢@T.J.Crowder,很有效!现在,存储数据库名称的更好方法是什么?在缓存中?在登录中,用户必须选择数据库,我想在登录控制器中在缓存中设置数据库名称。你觉得怎么样?感谢you@user3242861:我不知道你在这个例子中所说的缓存是什么意思。存储选择的位置将取决于应用程序的总体结构。
var connection = require('../config/db')('Emp1', function(err, connection) {
    // Use `err` and `connection` here
});
var mssql = require("mssql");

module.exports = function getConnection(db, callback) {
    return new Promise(function(resolve, reject) {
        if (db == 'Emp1') {
            var config = {
                user: "user",
                password: "pass",
                server: "ip",
                database: "Emp1"
            }
        }
        else if (db == 'Emp2') {
            var config = {
                user: "user",
                password: "pass",
                server: "ip",
                database: "Emp2"
            }
        }

        var connection = new mssql.Connection(config);
        connection.connect(function(err) {
            if (err) {
                reject(err);
            } else {
                resolve(connection);
            }
        });
    });
};
require('../config/db')('Emp1')
    .then(function(connection) {
        // Use `connection` here
    })
    .catch(function(err) {
        // Use `err` here
    });
var configs = {
    Emp1: {
        user: "user",
        password: "pass",
        server: "ip",
        database: "Emp1"
    },
    Emp2: {
        user: "user",
        password: "pass",
        server: "ip",
        database: "Emp2"
    }
};
var config = configs[db];