【Node.js】node-mssqlのいろいろなタイムアウト

概要

「RequestError: failed to cancel request in 5000ms」というエラーが出たのでnode-mssqlタイムアウトの設定について調べていました。
今回はrequestTimeoutに設定がなかったので重い処理がデフォルトでSQLがタイムアウトしてしまっていたのが原因だったようです。

参考

node-mssql/README.md at a55162111e0f3d0e95aa65094ddd9c2e335fa0dd · tediousjs/node-mssql
Microsoft SQL Server client for Node.js. Contribute to tediousjs/node-mssql development by creating an account on GitHub...
Node.js 使用時の接続タイムアウトの設定  |  Cloud SQL for SQL Server  |  Google Cloud
Node.js mssql モジュールを使用して、Cloud SQL for SQL Server に接続する際の接続タイムアウトを構成する方法を説明します。

mssql

該当のサーバーの設定を確認したところタイムアウト設定が抜けていたため、設定できる項目と内容を探していました。
いろいろなタイムアウトがあるんですね・・。
requestTimeoutとconnectionTimeoutの書き方はnode-mssqlのバージョンによって違うみたいです。

const sql = require('mssql');

const config = {
  user: 'username',
  password: 'password',
  server: 'localhost',
  database: 'your_database',
  pool: {
    max: 10,
    min: 0,
    idleTimeoutMillis: 10000, // 接続プール内の接続がアイドル状態(使用されていない状態)で保持される最大時間(ミリ秒単位)
    acquireTimeoutMillis: 30000, // 接続プールから接続を取得する際に待機する最大時間(ミリ秒単位)
  },
  options: {
    requestTimeout: 15000, // SQL クエリまたはストアドプロシージャの実行にかかる最大時間(ミリ秒単位)
  },
  connectionTimeout: 300000,// データベースへの接続が完了するまでに許可される最大時間(ミリ秒単位)
};

おわり。