浅谈NodeJs之数据库异常处理

前端之家收集整理的这篇文章主要介绍了浅谈NodeJs之数据库异常处理前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

NodeJs版本:4.4.4

数据库链接错误

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

如下:

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:

MysqL',port: '330666',query: {pool: true} }

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

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

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

数据库sql语句错误

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

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 onestairs")
  .then(function(results){
    resolve(results);

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

})
}

报错信息:

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

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

原文链接:https://www.f2er.com/nodejs/35607.html

猜你在找的Node.js相关文章