2016-07-21 9 views
2

私はormとしてnode-mysqlを使用しています。 (https://github.com/mysqljs/mysqlnode.jsでmysql接続とプールでシングルトンデザインパターンを使用する方法

私は、MySQLとNode.JSを使用してREST APIを作成しています。以前はMongoDBを使って同じことをしました。それはうまくいきます。 github.com/chanakaDe/Mint-REST。今私はMySQLを使用して同じことをしたいです。私はその部分のほとんどを行い、少し問題がありました。多くのクラスがあり、集中型の方法でmysql接続を使用する必要があります。シングルトンデザインパターンとして。

これは私の新しいレポです。 https://github.com/chanakaDe/MintRestSQL。そして私はそれらのパターンをどこで使いたいのかを示します。ここに私はデータベースファイルを持っています。私は新しい接続プールを作成しました。 github.com/chanakaDe/MintRestSQL/blob/master/app/util/database.js。

ここでは、この接続/プールをコントローラクラス内で使用したいと考えています。なぜなら私は各コントローラクラスで接続を作成することができないからです。いいえ?これは私の2つのコントローラです。 github.com/chanakaDe/MintRestSQL/blob/master/app/routes/report.js github.com/chanakaDe/MintRestSQL/blob/master/app/routes/api.js

私のより良い方法を提示してくださいこれをする。私はnode-mysqlが初めてです。しかし、生産段階のシステムであっても、Node.JS環境内でMySQLを使用するための素晴らしい方法です。だから、私はそれらの標準を使って良いAPIを作りたいと思っています。シングルトンパターンなどを使用して接続を集中化し、すべてのコントローラで使用する方法はありますか?

私のファイルを確認してコードを理解する時間がかかります。しかし、それを点検し、私に解決策を与えてください。私は多くのことを試みたが、うまくいきませんでした:(

をあなたは誰にも選択肢を提供するために

var mysql = require('mysql'); 

mysql.createPool({ 
    host  : 'localhost', 
    user  : 'root', 
    password : 'chanaka', 
    database : 'shared_adult' 
}).connect(); 

module.exports = mysql; 
+0

私は、この「github.com/chanakaDe/MintRestSのようなリンクを使用:依存関係(つまり、資格情報)を注入するために必要なこと(私のような)、ここに到着以下のランタイムconfiurableシングルトンをもたらすアプローチがありますQL/blob/master/app/routes/report.js "のように表示されます。見て、解決策を教えてください。私は本当にここにこだわっている。 –

答えて

1

てみ変更database.jsをレポを引くと作るために歓迎されています。

var mysql = require('mysql'), 
    db; 

module.exports = { 
    init: function(conf){ 
     if(!db){ 
      db = mysql.createPool({ 
       host: conf.host, 
       user: conf.root, 
       password: conf.password, 
       database: conf.database 
       }); 
     } 
    }, 
    get: function() { 
     if(!db) { 
     throw new Error('The db pool has not been initialized, call init({}) prior to get().'); 
     } 

     return db;  
    } 
}; 

//initialize where you access your config (which should theoretically only be one place) 
var mysqlDb = require('db'); //path to above db module 

mysqlDb.init({ 
    host: 'host', 
    user: 'user', 
    password: 'password', 
    database: 'database' 
}); 

//use in your modules 
var mysqlDb = require('db'), //path to above db module 
    db = mysqlDb.get(); 
関連する問題