2017-05-28 15 views
1

に私showData.jsスクリプトは、それが はどのようにNode.jsのmysqlの接続起動時

var pool = mysql.createPool({ 

のNode.jsサーバーの起動時に接続プールを作成する方法はあり

を呼び出して実行されるたびに利用できるプールを作るには?

私はserver.jsするcreatePoolを追加しようとしましたが、私は、私は

pool.getConnection(function(err,connection){ 

呼び出すときに私のshowData.jsスクリプトからオブジェクトにアクセスすることができないようでは、接続プールを起動することも必要ですnode.jsサーバーの起動?

mysql接続プールは、connection.releaseを呼び出した後でもになっていますか?

編集@Marco、私は得ているReferenceError:プールは定義されていません。私はshowData.jsにプールを引っ張っていないという問題があることを知っています。 node.jsによれば、モジュールを複数回ロードすることはOKです。ここでhttps://nodejs.org/api/modules.html

Caching

Modules are cached after the first time they are loaded. This means (among other things) that every call to require('foo') will get exactly the same object returned, if it would resolve to the same file.

Multiple calls to require('foo') may not cause the module code to be executed multiple times. This is an important feature. With it, "partially done" objects can be returned, thus allowing transitive dependencies to be loaded even when they would cause cycles.

If you want to have a module execute code multiple times, then export a function, and call that function.

から

は私の最新のセットアップです:

のlib/dbpool.js

var mysql = require('mysql'); 
var pool = mysql.createPool({ 
    connectionLimit : 10, 
    host   : 'someco.com', 
    user   : 'pinco', 
    password  : 'pallino' 
}); 

module.exports = pool; 

server.js

const pool = require('./lib/dbpool'); 

showData.js

'use strict'; 
module.exports = router => { 
    router.route('/show').post((req, res) => { 
     pool.query('SELECT * FROM db.users', function(err, rows, fields) { 

server.jsとshowData.jsの両方に次の行が必要ですか?

const pool = require('./lib/dbpool'); 
+0

server.jsにプールが必要ない場合は、モジュールはshowData.jsでのみ使用できます。 両方で必要な場合は、両方のファイルに「require」を追加できます。 –

答えて

5

次の内容でのlib/dbpool.jsと呼ばれるモジュールを定義します。アプリのコードで

var mysql = require('mysql'); 
var pool = mysql.createPool({ 
    connectionLimit : 10, 
    host   : 'someco.com', 
    user   : 'pinco', 
    password  : 'pallino' 
}); 

module.exports = pool; 

を、次に使用します。

const pool = require('./lib/dbpool'); 

app.post('/your/app/url', (req, res) => { 
    pool.query('your query', function(err, rows, fields) { 
    if (err) throw err; 
    /* Manage your results here */ 

    }); 
} 

pool.queryは、実際に実行されます。プール。

+0

これは素晴らしい情報です。ありがとう、マルコ。私の懸念は、私のアプリケーションコードが1分に数千回呼び出されることです。 constプールが作成されるたびに何が起こっていますか?私の懸念は、接続プールを別の場所に作成して開いておく必要があるかもしれないということです。それとも、これは間違った心配ですか? createPoolが絶えず呼び出されているように見えますが、接続プールは一度開いて開いておく必要があると思います。 – mcmacerson

+0

@mcmacerson接続プールは一度作成する必要があります。 app.jsでモジュールをインポートし、呼び出されたすべてのエンドポイントがある場合は、プールが一度作成され、接続が再利用されます。 –

+0

投稿を編集しました。 – mcmacerson

関連する問題