亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

NodeJs中怎么對數據庫異常進行處理

發布時間:2021-07-21 10:51:38 來源:億速云 閱讀:209 作者:Leah 欄目:web開發

NodeJs中怎么對數據庫異常進行處理,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

數據庫鏈接錯誤

使用nodejs處理異常最麻煩不過,這里我拋開nodejs提供的domain和一些第三方庫專門處理的東西。操作數據庫是我們常用的功能。通過回調,我們這里會有很多err出沒。

如下:

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)
      })
  })
}

可以看到2個回調的地方都會有出錯的可能。

并且這是一個模塊,我們將它導出了。

這里我們故意將數據庫鏈接的端口號填錯,寫成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('../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) 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('[err]',err)
      })
  })
}

報錯信息:

[2017-01-05 14:40:14.518] [ERROR] runlog - [err] { [Error: ER_BAD_FIELD_ERROR: Unknown column 'onestairs' in 'group statement']
 code: 'ER_BAD_FIELD_ERROR',
 errno: 1054,
 sqlState: '42S22',
 index: 0 }
Error: ER_BAD_FIELD_ERROR: Unknown column 'onestairs' in 'group statement'
  at Query.Sequence._packetToError (E:\zz\zz_wb123\manage\trunk\code\nod
....

可以看到錯誤都是通過catch拋出。

所以如果使用了Promise我們可以直接在catch中抓到下面拋出的異常。不需要再去queryPromise函數中打日志異常了。

這里有一篇stackoverflow處理錯誤的非常有用的問答node-js-best-practice-exception-handling

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

桐城市| 都江堰市| 兴仁县| 滦平县| 嘉祥县| 安徽省| 开鲁县| 渝北区| 平乡县| 无棣县| 嘉峪关市| 永定县| 水富县| 桃园市| 崇明县| 六安市| 禹州市| 桃江县| 兴文县| 思南县| 金川县| 宁陕县| 望谟县| 通江县| 永川市| 青阳县| 台中县| 丘北县| 寿光市| 蕲春县| 大城县| 织金县| 灵石县| 黔南| 夏邑县| 娱乐| 田东县| 塔城市| 平和县| 望城县| 北流市|