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