2017-10-25 4 views
0

コントローラでは、私はconfig/dbへの要求を行いましたが、いくつかのデータベースを持つことができるので、データベース名でパラメータを送信する必要があります。ノードjs - 必要なパラメータを渡す方法

だから、コントローラに、私はこれを行う:

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

"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の値はどのように受け取ることができますか?

config/db I console.log(arguments)で、それは私のデシベル値を持つ任意のフィールドが表示されない場合は

...

は、私はこれをどのように解決することができます。

node-cacheを使用してconfig/dbのdb名を取得する方が良いでしょうか?

ありがとうございます

答えて

1

できません。代わりに、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コールから接続を作成し、接続を使用しているモジュールをconnectにすることもできます。それにアプローチする方法はたくさんあります。


より現代的なAPIは、(自分自身のために、そして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); 
      } 
     }); 
    }); 
}; 

その後、

require('../config/db')('Emp1') 
    .then(function(connection) { 
     // Use `connection` here 
    }) 
    .catch(function(err) { 
     // Use `err` here 
    }); 

を上記の私はES5の構文にとどまっています(本当にoを使用している場合は、モジュールによってプロミスが提供されます)あなたのコードは現在、ES2015 +機能の使用を避けているようです。


は最後に:その後、

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

var config = configs[db]; 

おそらくそれらをファイルから読み込む...

:私は、オブジェクトまたは Mapを使用するように設定の選択を変更することをお勧めしたいです
+0

ありがとうございます@TJクラウダー、作品! データベース名を格納するためのより良い方法は何ですか?キャッシュで? ログインユーザーはデータベースを選択する必要があり、私はログインコントローラーでキャッシュ内のデータベース名を設定すると考えています。あれについてどう思う?ありがとうございます – user3242861

+0

@ user3242861:この例では "キャッシュ"が何を意味するのか分かりません。その選択肢を保存する場所は、アプリの全体的な構造によって異なります。 –

関連する問題