国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > JavaScript > 正文

淺談NodeJs之?dāng)?shù)據(jù)庫(kù)異常處理

2019-11-19 15:05:28
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

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

NodeJs版本:4.4.4

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

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

并且這是一個(gè)模塊,我們將它導(dǎo)出了。

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

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

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

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

[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ù)庫(kù)sql語(yǔ)句錯(cuò)誤

我們修改一下代碼,將數(shù)據(jù)庫(kù)鏈接填對(duì),修改sql語(yǔ)句為錯(cuò)誤的語(yǔ)句。

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

報(bào)錯(cuò)信息:

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

可以看到錯(cuò)誤都是通過catch拋出。

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

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

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 尖扎县| 于都县| 梨树县| 铜山县| 江油市| 巴东县| 安国市| 武冈市| 容城县| 淮安市| 区。| 武义县| 双峰县| 汉川市| 荣昌县| 紫金县| 富平县| 玉门市| 昌宁县| 建昌县| 宁强县| 谷城县| 台东县| 泸溪县| 宝坻区| 衡山县| 曲水县| 潞城市| 湖北省| 榆树市| 娱乐| 石河子市| 南昌市| 汝州市| 禹城市| 秦皇岛市| 巴塘县| 兴化市| 大理市| 崇信县| 黄山市|