Detailed explanation of database exception handling in NodeJs

小云云
Release: 2018-01-03 11:28:50
Original
1863 people have browsed it

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 #domainand 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) }) }) }
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 as 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.

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!

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!