Home > Web Front-end > JS Tutorial > body text

Detailed explanation of NodeJs handling database exceptions

php中世界最好的语言
Release: 2018-04-17 10:12:08
Original
1157 people have browsed it

This time I will bring you a detailed explanation of NodeJs handling database exceptions. What are the precautions for NodeJs handling database exceptions? Here are practical cases, let’s take a look.

NodeJs version:4.4.4

Database link error

The most troublesome thing is to use nodejs to handle exceptions. Here I leave aside the domain provided by nodejs and some things specially handled by third-party libraries. Operating the database is a commonly used function for us. Through callbacks, we will have a lot of err here.

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)
      })
  })
}
Copy after login

You can see that errors may occur in both callbacks.

And this is a module, we exported it.

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

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

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
...
Copy after login

Database sql statement error

Let's modify the code, fill in the database link correctly, and modify the sql statement to the wrong statement.

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)
      })
  })
}
Copy after login

Error message:

[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
....
Copy after login

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.

I believe you have mastered the method after reading the case in this article. For more exciting information, please pay attention to other related articles on the php Chinese website!

Recommended reading:



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

Related labels:
source:php.cn
Statement of this Website
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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template