NodeJs's solution to database exception handling

黄舟
Release: 2017-10-25 09:37:41
Original
1499 people have browsed it

Database link error

Using nodejs to handle exceptions is the most troublesome. Here I leave aside thedomainprovided by nodejs and some third-party libraries to handle it specifically. s 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) }) }) }
Copy after login

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

The above is the detailed content of NodeJs's solution to database exception handling. 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
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!