浅谈NodeJs之数据库异常处理


Posted in NodeJs onOctober 25, 2017

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

NodeJs版本:4.4.4

数据库链接错误

使用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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

NodeJs 相关文章推荐
nodejs实现HTTPS发起POST请求
Apr 23 NodeJs
nodejs调用cmd命令实现复制目录
May 04 NodeJs
NodeJS远程代码执行
Aug 28 NodeJs
NodeJs读取JSON文件格式化时的注意事项
Sep 25 NodeJs
初探nodeJS
Jan 24 NodeJs
nodejs基础知识
Feb 03 NodeJs
nodejs个人博客开发第一步 准备工作
Apr 12 NodeJs
nodejs async异步常用函数总结(推荐)
Nov 17 NodeJs
nodejs发送http请求时遇到404长时间未响应的解决方法
Dec 10 NodeJs
NodeJS安装图文教程
Apr 19 NodeJs
详解redis在nodejs中的应用
May 02 NodeJs
nodejs环境使用Typeorm连接查询Oracle数据
Dec 05 NodeJs
详解使用PM2管理nodejs进程
Oct 24 #NodeJs
nodejs中安装ghost出错的原因及解决方法
Oct 23 #NodeJs
详解Nodejs 通过 fs.createWriteStream 保存文件
Oct 10 #NodeJs
NodeJs通过async/await处理异步的方法
Oct 09 #NodeJs
nodejs 图片预览和上传的示例代码
Sep 30 #NodeJs
Nodejs调用WebService的示例代码
Sep 29 #NodeJs
Nodejs+angularjs结合multiparty实现多图片上传的示例代码
Sep 29 #NodeJs
You might like
PHP处理Oracle的CLOB实例
2014/11/03 PHP
Thinkphp 框架扩展之行为扩展原理与实现方法分析
2020/04/23 PHP
Extjs中的GridPanel隐藏列会显示在menuDisabled中解决方法
2013/01/27 Javascript
使用javascript实现雪花飘落的效果
2015/01/13 Javascript
js实现基于正则表达式的轻量提示插件
2015/08/29 Javascript
JS实现适合于后台使用的动画折叠菜单效果
2015/09/21 Javascript
微信小程序 icon组件详细及实例代码
2016/10/25 Javascript
Javascript 判断两个IP是否在同一网段实例代码
2016/11/28 Javascript
Javascript中 带名 匿名 箭头函数的重要区别(推荐)
2017/01/29 Javascript
JavaScript中数组Array方法详解
2017/02/27 Javascript
理解nodejs的stream和pipe机制的原理和实现
2017/08/12 NodeJs
node简单实现一个更改头像功能的示例
2017/12/29 Javascript
vue toggle做一个点击切换class(实例讲解)
2018/03/13 Javascript
Redux实现组合计数器的示例代码
2018/07/04 Javascript
JavaScript原型对象、构造函数和实例对象功能与用法详解
2018/08/04 Javascript
前后端如何实现登录token拦截校验详解
2018/09/03 Javascript
详解vuex中action何时完成以及如何正确调用dispatch的思考
2019/01/21 Javascript
教你30秒发布一个TypeScript包到NPM的方法步骤
2019/07/22 Javascript
解决vue cli4升级sass-loader(v8)后报错问题
2020/07/30 Javascript
[36:37]2014 DOTA2华西杯精英邀请赛5 24 VG VS iG
2014/05/25 DOTA
Windows下用py2exe将Python程序打包成exe程序的教程
2015/04/08 Python
在Django框架中编写Context处理器的方法
2015/07/20 Python
numpy使用技巧之数组过滤实例代码
2018/02/03 Python
django haystack实现全文检索的示例代码
2020/06/24 Python
New Balance波兰官方商城:始于1906年,百年慢跑品牌
2017/08/15 全球购物
Keds加拿大官网:购买帆布运动鞋和皮鞋
2019/09/26 全球购物
Penhaligon’s英国官网:成立于1870年的英国香水制造商
2021/02/18 全球购物
中学家长会邀请函
2014/02/03 职场文书
十佳护士获奖感言
2014/02/18 职场文书
五年后的职业生涯规划
2014/03/04 职场文书
公司自我介绍演讲稿
2014/08/21 职场文书
领导党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
刑事辩护授权委托书格式
2014/10/13 职场文书
学习十八届四中全会精神思想汇报
2014/10/23 职场文书
地球上的星星观后感
2015/06/02 职场文书
微软发布Windows 11今年最大更新22H2(附 ISO 镜像官方下载)
2022/09/23 数码科技