Home  >  Article  >  Web Front-end  >  Detailed explanation of database exception handling in NodeJs

Detailed explanation of database exception handling in NodeJs

小云云
小云云Original
2018-01-03 11:28:501940browse

This article mainly introduces a brief discussion of database exception handling in NodeJs. The editor thinks it is quite good, so I will share it with you now and give it as a reference. Let’s follow the editor to take a look, I hope it can help everyone.

NodeJs version: 4.4.4

Database link error

Using nodejs to handle exceptions is the most troublesome, here I will ignore the ## provided by nodejs #domain and some third-party libraries specifically handle things. Operating the database is a commonly used function for us. Through callbacks, we will have a lot of err here.

is as follows:


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

You can see that there is a possibility of errors in both callbacks.

And this is a module, we exported it.

Here we deliberately fill in the wrong port number for the database connection and write it as 330666:

##

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

In this case, an error will occur when we connect to the database. .

Here we use promise, so in the exported function, we use catch, which will catch the error in the queryPromise function and print it to the log.


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

Database sql statement error

Let’s modify the code, fill in the database link correctly, and modify the sql statement as Wrong statement.

var pool = require(&#39;../db.js&#39;);
var runtimeLog = require(&#39;../log.js&#39;).getLogger(&#39;runlog&#39;);
var Promise = require(&#39;bluebird&#39;);

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(&#39;[err]&#39;,err)
      })
  })
}

Error message:

[2017-01-05 14:40:14.518] [ERROR] runlog - [err] { [Error: ER_BAD_FIELD_ERROR: Unknown column &#39;onestairs&#39; in &#39;group statement&#39;]
 code: &#39;ER_BAD_FIELD_ERROR&#39;,
 errno: 1054,
 sqlState: &#39;42S22&#39;,
 index: 0 }
Error: ER_BAD_FIELD_ERROR: Unknown column &#39;onestairs&#39; in &#39;group statement&#39;
  at Query.Sequence._packetToError (E:\zz\zz_wb123\manage\trunk\code\nod
....

You can see that errors are all thrown through catch.

So if Promise is used, we can directly catch the exception thrown below in catch. There is no need to log exceptions in the queryPromise function.

Here is a very useful question and answer on stackoverflow node-js-best-practice-exception-handling

Related recommendations:


About Solution to insufficient memory caused by PHP query database

What should I do if system error 1067 occurs in the green version of Mysql database?

Mysql database detailed explanation (ubuntu 14.0.4 LTS 64)

The above is the detailed content of Detailed explanation of database exception handling in NodeJs. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn