浅谈NodeJs之数据库异常处理

本文介绍了NodeJs之数据库异常处理,分享给大家,具体如下:

NodeJs版本:4.4.4

数据库链接错误

使用nodejs处理异常最麻烦不过,这里我抛开nodejs提供的domain和一些第三方库专门处理的东西。操作数据库是我们常用的功能。通过回调,我们这里会有很多err出没。

如下:

rush:js;"> 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 o<a href="https://www.jb51.cc/tag/nes/" target="_blank" class="keywords">nes</a>tair")
  .then(function(results){
    resolve(results);

  })
  .catch(function(err){
    runtimeLog.error(err)
  })

})
}

可以看到2个回调的地方都会有出错的可能。

并且这是一个模块,我们将它导出了。

这里我们故意将数据库链接的端口号填错,写成330666:

rush:js;"> module.exports = { host: '192.168.6.101',database: 'web123',user: 'root',password: 'passw0rd',protocol: 'MysqL',port: '330666',query: {pool: true} }

这样的话,在我们链接数据库的时候是会出错的。

这里我们使用了promise,所以在导出的函数中,我们使用了catch,他会抓到queryPromise函数中的错误,并打印到日志中。

= 0 and < 65536: 330666] RangeError: port should be >= 0 and < 65536: 330666 ...

数据库sql语句错误

我们修改一下代码,将数据库链接填对,修改sql语句为错误的语句。

rush:js;"> var pool = require('../db.js'); var runtimeLog = require('../log.js').getLogger('runlog'); var Promise = require('bluebird');

function queryPromise(queryString) {
return new Promise(function(resolve,connection) {

  connection.query(queryString,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 o<a href="https://www.jb51.cc/tag/nes/" target="_blank" class="keywords">nes</a>ta<a href="https://www.jb51.cc/tag/irs/" target="_blank" class="keywords">irs</a>")
  .then(function(results){
    resolve(results);

  })
  .catch(function(err){
    runtimeLog.error('[err]',err)
  })

})
}

报错信息:

rush:plain;"> [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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。

相关文章

这篇文章主要介绍“基于nodejs的ssh2怎么实现自动化部署”的...
本文小编为大家详细介绍“nodejs怎么实现目录不存在自动创建...
这篇“如何把nodejs数据传到前端”文章的知识点大部分人都不...
本文小编为大家详细介绍“nodejs如何实现定时删除文件”,内...
这篇文章主要讲解了“nodejs安装模块卡住不动怎么解决”,文...
今天小编给大家分享一下如何检测nodejs有没有安装成功的相关...