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

时间:2017-10-25 11:12:34

标签: javascript sql-server node.js

在控制器中我对config/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/dbconsole.log(arguments),它没有向我显示任何具有db值的字段......

我该如何解决这个问题。

使用node-cache获取config/db中的数据库名称的更好方法是什么?

谢谢

1 个答案:

答案 0 :(得分:1)

你做不到。因此,您使 ValueError: could not convert string to float: '2015-37' 返回工厂进行连接,而不是连接。旧式的Node回调方式看起来像这样(这是概念,并不意味着完美)

config/db

...然后像这样使用它:

var mssql = require("mssql");

module.exports = function getConnection(db, callback) {
    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) {
        callback(err, connection);
    });
};

或者您可以将var connection = require('../config/db')('Emp1', function(err, connection) { // Use `err` and `connection` here }); 调用中的连接分开,并让使用该连接的模块执行connect。有很多方法可以解决它。

更现代的API会使用Promises(为了他们自己,并允许使用connect / async):

await

然后

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);
            }
        });
    });
};

在上面我已经使用了ES5语法(如果您使用的是旧版本的Node,Promises可以由模块提供),因为您的代码目前似乎避免使用ES2015 +功能。

最后:我建议您更改配置选择以使用对象或require('../config/db')('Emp1') .then(function(connection) { // Use `connection` here }) .catch(function(err) { // Use `err` here });

Map

然后

var configs = {
    Emp1: {
        user: "user",
        password: "pass",
        server: "ip",
        database: "Emp1"
    },
    Emp2: {
        user: "user",
        password: "pass",
        server: "ip",
        database: "Emp2"
    }
};

甚至可能从文件中加载它们......