国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 赤峰市| 云安县| 五常市| 常州市| 普安县| 日照市| 定边县| 茂名市| 宁安市| 清远市| 阳原县| 广东省| 桐梓县| 察哈| 朔州市| 通州市| 高台县| 延边| 五峰| 河南省| 霍林郭勒市| 鄂伦春自治旗| 西和县| 谢通门县| 遂溪县| 道孚县| 武川县| 双鸭山市| 天水市| 西平县| 新龙县| 安阳市| 南陵县| 横山县| SHOW| 蓝田县| 尚义县| 凌云县| 合山市| 视频| 肇州县|