サーチ…


前書き

このトピックでは、MYSQLデータベース管理ツールを使用してNode.jsと統合する方法を学習します。 nodejsプログラムとスクリプトを使用して、mysqlに存在するデータに接続して対話するさまざまな方法を学びます。

パラメータを使用して接続オブジェクトを照会する

SQLでユーザー生成コンテンツを使用する場合は、パラメータを使用して行います。たとえば、 aminadavという名前のユーザーを検索する場合は、 aminadavようにします。

var username = 'aminadav';
var querystring = 'SELECT name, email from users where name = ?'; 
connection.query(querystring, [username], function(err, rows, fields) {
  if (err) throw err;
  if (rows.length) {
    rows.forEach(function(row) {
      console.log(row.name, 'email address is', row.email);
    });
  } else {
    console.log('There were no results.');
  }
});

接続プールの使用

a。複数のクエリを同時に実行する

MySQL接続のすべてのクエリは次々に実行されます。つまり、10回のクエリを実行し、各クエリが2秒かかる場合は、実行全体を完了するのに20秒かかります。解決策は、10の接続を作成し、それぞれのクエリを異なる接続で実行することです。これは、接続プールを使用して自動的に行うことができます

var pool  = mysql.createPool({
  connectionLimit : 10,
  host            : 'example.org',
  user            : 'bobby',
  password        : 'pass',
  database        : 'schema'
});

for(var i=0;i<10;i++){
  pool.query('SELECT ` as example', function(err, rows, fields) {
    if (err) throw err;
    console.log(rows[0].example); //Show 1
  });
 }

10個のクエリをすべて並列に実行します。

poolを使用するときは、接続は必要ありません。プールに直接問い合わせることができます。 MySQLモジュールは、次の空き接続を検索してクエリを実行します。

b。異なるデータベースがホストされているデータベースサーバーでのマルチテナントの実現

今日、エンタープライズアプリケーションの共通要件としてマルチテナントがあり、データベースサーバーの各データベースに接続プールを作成することはお勧めしません。ですから、データベースサーバーとの接続プールを作成し、必要に応じてデータベースサーバー上にホストされているデータベース間で切り替えることができます。

私たちのアプリケーションが、データベースサーバ上にホストされている各企業ごとに異なるデータベースを持っているとします。ユーザーがアプリケーションにヒットすると、それぞれの企業データベースに接続します。これを行う方法の例を以下に示します。

var pool  = mysql.createPool({
      connectionLimit : 10,
      host            : 'example.org',
      user            : 'bobby',
      password        : 'pass'
    });
    
pool.getConnection(function(err, connection){
    if(err){
        return cb(err);
    }
    connection.changeUser({database : "firm1"});
    connection.query("SELECT * from history", function(err, data){
        connection.release();
        cb(err, data);
    });
});

私は例を分解しましょう:

プール設定を定義するとき、私はデータベース名を与えず、データベースサーバだけを与えました。

{
  connectionLimit : 10,
  host            : 'example.org',
  user            : 'bobby',
  password        : 'pass'
}

データベースサーバー上の特定のデータベースを使用する場合は、次のコマンドを使用してヒットデータベースへの接続を尋ねます。

    connection.changeUser({database : "firm1"});

あなたは公式の文書をここで参照することができます

MySQLに接続する

MySQLに接続する最も簡単な方法の1つは、 mysqlモジュールを使用することです。このモジュールは、Node.jsアプリケーションとMySQLサーバ間の接続を処理します。他のモジュールと同様にインストールできます:

npm install --save mysql

今度はmysql接続を作成しなければなりません。これを後で問い合わせることができます。

const mysql      = require('mysql');
const connection = mysql.createConnection({
  host     : 'localhost',
  user     : 'me',
  password : 'secret',
  database : 'database_schema'
});

connection.connect();

// Execute some query statements
// I.e. SELECT * FROM FOO

connection.end();

次の例では、 connectionオブジェクトを照会する方法を学習します。

パラメータなしで接続オブジェクトを照会する

クエリを文字列として送信し、応答を含む応答コールバックを受信します。コールバックはerrorrowsとフィールドの配列をrowsます。各行には、返されたテーブルのすべての列が含まれます。以下の説明のための抜粋です。

connection.query('SELECT name,email from users', function(err, rows, fields) {
  if (err) throw err;

  console.log('There are:', rows.length,' users');
  console.log('First user name is:',rows[0].name)
});

プールからの単一の接続で多数のクエリを実行する

MySQL接続のプールをセットアップしている状況があるかもしれませんが、あなたは順番に実行したいいくつかのクエリを持っています:

SELECT 1;
SELECT 2;

pool.query 使用して実行することもできます 、プール内に空き接続が1つしかない場合は、2番目のクエリを実行する前に接続が利用可能になるまで待つ必要があります。

ただし、 pool.getConnectionを使用して1つの接続を使用したい場合は、プールからアクティブな接続を保持し、多くのクエリを実行できます。

pool.getConnection(function (err, conn) {
  if (err) return callback(err);

  conn.query('SELECT 1 AS seq', function (err, rows) {
    if (err) throw err;

    conn.query('SELECT 2 AS seq', function (err, rows) {
      if (err) throw err;

      conn.release();
      callback();
    });
  });
});

注意:接続をreleaseすることを忘れないでください。そうしないと、プールの残りの部分で使用可能なMySQL接続が1つ少なくなります。

MySQL接続のプールの詳細については、MySQLのドキュメントを参照してください

エラーが発生したときにクエリを返します。

あなたは、あなたに実行されたクエリ添付することができerrエラーが発生したときにオブジェクトを:

var q = mysql.query('SELECT `name` FROM `pokedex` WHERE `id` = ?', [ 25 ], function (err, result) {
  if (err) {
    // Table 'test.pokedex' doesn't exist
    err.query = q.sql; // SELECT `name` FROM `pokedex` WHERE `id` = 25
    callback(err);
  }
  else {
    callback(null, result);
  }
});

接続プールのエクスポート

// db.js

const mysql = require('mysql');

const pool = mysql.createPool({
  connectionLimit : 10,
  host            : 'example.org',
  user            : 'bob',
  password        : 'secret',
  database        : 'my_db'
});

module.export = {
  getConnection: (callback) => {
    return pool.getConnection(callback);
  } 
}
// app.js

const db = require('./db');

db.getConnection((err, conn) => {
  conn.query('SELECT something from sometable', (error, results, fields) => {
    // get the results
    conn.release();
  });
});


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow