Node.js で同期クエリを実行する方法

PHPz
リリース: 2023-04-07 10:35:01
オリジナル
828 人が閲覧しました

Node.js では、データベース クエリが必要になることがよくあります。データベースへのクエリは I/O 操作であり、通常は他のイベントのブロックを避けるために非同期呼び出しが使用されます。ただし、場合によっては、同期クエリを実行する必要があります。この記事では、Node.js で同期クエリを実行する方法を紹介します。

1. Node.js の非同期クエリ

通常、Node.js は他のイベントのブロックを避けるために非同期クエリを使用します。たとえば、以下に示すように、Node.js の mysql 接続プールを使用して非同期クエリを実行できます。

const mysql = require('mysql');
const pool = mysql.createPool({
  host: 'localhost',
  user: 'username',
  password: 'password',
  database: 'database_name'
});

function asyncQuery(sql, values, callback) {
  pool.getConnection(function(err, connection) {
    if (err) {
      return callback(err);
    }
    connection.query(sql, values, function(err, results) {
      connection.release();
      if (err) {
        return callback(err);
      }
      callback(null, results);
    });
  });
}
ログイン後にコピー

上記のコードでは、asyncQuery 関数が非同期クエリを実行します。結果はコールバック関数を通じて返されます。

2. Node.js 同期クエリ

場合によっては、初期化中にデータベース コンテンツをロードするなど、SQL クエリを同期的に実行する必要があります。 Node.js では、sync-mysql モジュールを使用して同期クエリを実装できます。 sync-mysqlモジュールはクエリごとに新しい接続を自動的に作成し、接続の再利用を可能にするために接続の終了を遅らせます。以下は同期クエリの例です。

const SyncMySQL = require('sync-mysql');
const connection = new SyncMySQL({
  host: 'localhost',
  user: 'username',
  password: 'password',
  database: 'database_name'
});

try {
  const rows = connection.query('SELECT * FROM users');
  console.log(rows);
} catch (err) {
  console.error(err);
}
ログイン後にコピー

上記のコードでは、SyncMySQL 接続を作成し、query メソッドを使用してクエリを実行します。結果を rows 変数に保存します。エラーが発生した場合、catch ステートメントによってエラーが捕捉され、エラー メッセージが出力されます。

同期クエリはアプリケーション内の他のイベントをブロックする可能性があるため、同期クエリは必要な場合にのみ使用してください。複数のクエリを実行する必要がある場合は、非同期呼び出しを使用することをお勧めします。

結論

Node.js でデータベース クエリを実行する場合、他のイベントのブロックを避けるために非同期クエリを使用するのが一般的です。ただし、初期化中など、場合によっては、同期クエリを実行する必要があります。この記事では、Node.js で同期クエリを実行する方法を紹介します。

以上がNode.js で同期クエリを実行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート