データベース例外処理に対する NodeJs のソリューション

黄舟
リリース: 2017-10-25 09:37:41
オリジナル
1608 人が閲覧しました

データベースリンクエラー

nodejsを使用して例外を処理するのが最も面倒ですが、ここではnodejsによって提供されるdomainとそれを特別に処理するいくつかのサードパーティライブラリについては脇に置きます。データベースの操作は私たちにとってよく使われる機能です。コールバックを使用すると、ここで多くのエラーが発生します。

以下の通り:


var pool = require('../db.js');
var runtimeLog = require('../log.js').getLogger('runlog');
var Promise = require('bluebird');
function queryPromise(queryString) {
  return new Promise(function(resolve, reject) {
    pool.getConnection(function(err, connection) {
      //connection.query(queryString, function(err, rows, fields) {
      // if (!err) {
      //   resolve(rows);
      //  } else {
      //   runtimeLog.error(err)
      //   reject(err)
      //  }
      // connection.release();
      //});
    })
  })
}
module.exports = function() {
  return new Promise(function(resolve, reject) {
    queryPromise("select * from wb123_home_map GROUP BY onestair")
      .then(function(results){
        resolve(results);
      })
      .catch(function(err){
        runtimeLog.error(err)
      })
  })
}
ログイン後にコピー

両方のコールバックでエラーが発生する可能性があることがわかります。

そしてこれはモジュールであり、エクスポートしました。

ここでは、データベース接続用に意図的に間違ったポート番号を入力し、 330666:


module.exports = {
  host:   '192.168.6.101',
  database: 'web123',
  user:   'root',
  password: 'passw0rd',
  protocol: 'mysql',
  port:   '330666',
  query:  {pool: true}
}
ログイン後にコピー

この場合、データベースに接続するときにエラーが発生します。

ここでは Promise を使用しているため、エクスポートされた関数で catch を使用します。これにより、queryPromise 関数でエラーがキャッチされ、ログに出力されます。


[2017-01-05 13:27:59.648] [ERROR] runlog - [err] [RangeError: port should be >= 0 and < 65536: 330666]
RangeError: port should be >= 0 and < 65536: 330666
...
ログイン後にコピー

データベース SQL ステートメント エラー

コードを変更し、データベース リンクを正しく記入し、SQL ステートメントを間違ったステートメントに変更しましょう。


var pool = require(&#39;../db.js&#39;);
var runtimeLog = require(&#39;../log.js&#39;).getLogger(&#39;runlog&#39;);
var Promise = require(&#39;bluebird&#39;);
function queryPromise(queryString) {
  return new Promise(function(resolve, reject) {
    pool.getConnection(function(err, connection) {
      connection.query(queryString, function(err, rows, fields) {
        //if (err) throw err;
        if (!err) {
          resolve(rows);
         } else {
          reject(err)
         }
        connection.release();
      });
    })
  })
}
module.exports = function() {
  return new Promise(function(resolve, reject) {
    queryPromise("select * from wb123_home_map GROUP BY onestairs")
      .then(function(results){
        resolve(results);
      })
      .catch(function(err){
        runtimeLog.error(&#39;[err]&#39;,err)
      })
  })
}
ログイン後にコピー

エラーメッセージ:


[2017-01-05 14:40:14.518] [ERROR] runlog - [err] { [Error: ER_BAD_FIELD_ERROR: Unknown column &#39;onestairs&#39; in &#39;group statement&#39;]
 code: &#39;ER_BAD_FIELD_ERROR&#39;,
 errno: 1054,
 sqlState: &#39;42S22&#39;,
 index: 0 }
Error: ER_BAD_FIELD_ERROR: Unknown column &#39;onestairs&#39; in &#39;group statement&#39;
  at Query.Sequence._packetToError (E:\zz\zz_wb123\manage\trunk\code\nod
....
ログイン後にコピー

エラーはすべて catch を通じてスローされることがわかります。

つまり、Promise を使用すると、以下にスローされた例外を catch で直接キャッチできます。 queryPromise 関数で例外をログに記録する必要はありません。

以上がデータベース例外処理に対する NodeJs のソリューションの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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