欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談NodeJs之數(shù)據(jù)庫異常處理

 更新時間:2017年10月25日 08:21:21   作者:leslie·Zhao  
這篇文章主要介紹了淺談NodeJs之數(shù)據(jù)庫異常處理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

本文介紹了NodeJs之數(shù)據(jù)庫異常處理,分享給大家,具體如下:

NodeJs版本:4.4.4

數(shù)據(jù)庫鏈接錯誤

使用nodejs處理異常最麻煩不過,這里我拋開nodejs提供的domain和一些第三方庫專門處理的東西。操作數(shù)據(jù)庫是我們常用的功能。通過回調(diào),我們這里會有很多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個回調(diào)的地方都會有出錯的可能。

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

這里我們故意將數(shù)據(jù)庫鏈接的端口號填錯,寫成330666:

module.exports = {
  host:   '192.168.6.101',
  database: 'web123',
  user:   'root',
  password: 'passw0rd',
  protocol: 'mysql',
  port:   '330666',
  query:  {pool: true}
}

這樣的話,在我們鏈接數(shù)據(jù)庫的時候是會出錯的。

這里我們使用了promise,所以在導出的函數(shù)中,我們使用了catch,他會抓到queryPromise函數(shù)中的錯誤,并打印到日志中。

[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
...

數(shù)據(jù)庫sql語句錯誤

我們修改一下代碼,將數(shù)據(jù)庫鏈接填對,修改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函數(shù)中打日志異常了。

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

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • npm報錯:npm?WARN?config?global?'--global',?'--local'?are?deprecated解決

    npm報錯:npm?WARN?config?global?'--global',?&apo

    這篇文章主要給大家介紹了關(guān)于npm報錯:npm?WARN?config?global?'--global',?'--local'?are?deprecated.?Use?`--location=global`?instead.的解決方法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-08-08
  • 手把手教你使用TypeScript開發(fā)Node.js應用

    手把手教你使用TypeScript開發(fā)Node.js應用

    為了減少代碼編寫過程中出現(xiàn)的錯誤,以及更好的維護你的項目,本文將手把手教你配置一個簡單的開發(fā)環(huán)境來編寫Node.js的應用程序,感興趣的小伙伴們可以參考一下
    2019-05-05
  • Nodejs處理Json文件并將處理后的數(shù)據(jù)寫入新文件中

    Nodejs處理Json文件并將處理后的數(shù)據(jù)寫入新文件中

    這篇文章主要介紹了Nodejs處理Json文件并將處理后的數(shù)據(jù)寫入新文件中,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • mac下徹底卸載node和npm方法步驟

    mac下徹底卸載node和npm方法步驟

    我們經(jīng)常在卸載軟件的時候會遇到有殘留,這樣就很難去重新下載,本篇文章就來介紹mac下徹底卸載node和npm及重新安裝的方法,有需要的朋友可以借鑒參考下
    2021-09-09
  • Node.js安裝及npm國內(nèi)鏡像配置的方法實現(xiàn)

    Node.js安裝及npm國內(nèi)鏡像配置的方法實現(xiàn)

    本文主要介紹了Node.js安裝及npm國內(nèi)鏡像配置,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • node以及npm版本不對應出錯的完美解決方法

    node以及npm版本不對應出錯的完美解決方法

    最近項目用到了node和npm,查看一下當前版本,發(fā)現(xiàn)有報錯,下面這篇文章主要給大家介紹了關(guān)于node以及npm版本不對應出錯的完美解決方法,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2023-05-05
  • 如何讓Nodejs支持H5 History模式(connect-history-api-fallback源碼分析)

    如何讓Nodejs支持H5 History模式(connect-history-api-fallback源碼分析)

    這篇文章主要介紹了如何讓Nodejs支持H5 History模式(connect-history-api-fallback源碼分析),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • nodejs nedb 封裝庫與使用方法示例

    nodejs nedb 封裝庫與使用方法示例

    這篇文章主要介紹了nodejs nedb 封裝庫與使用方法,結(jié)合實例形式分析了nodejs nedb.js封裝庫的定義與使用技巧,需要的朋友可以參考下
    2020-02-02
  • node.js中的url.parse方法使用舉例

    node.js中的url.parse方法使用舉例

    url.parse()可以將一個完整的URL地址,分為很多部分,下面這篇文章主要給大家介紹了關(guān)于node.js中url.parse方法使用的相關(guān)資料,文中通過實例代碼和圖文介紹的非常詳細,需要的朋友可以參考下
    2023-03-03
  • 參考EventEmitter實現(xiàn)完整訂閱發(fā)布功能函數(shù)

    參考EventEmitter實現(xiàn)完整訂閱發(fā)布功能函數(shù)

    這篇文章主要為大家介紹了參考EventEmitter實現(xiàn)完整訂閱發(fā)布功能函數(shù)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02

最新評論