socket.io - Node.js and global MySQL connection OBJ -
i'm beginner node.js, ever ok use mysql global var?
i have db_helper.js code inside:
global.client = require('mysql').createconnection({ user: '__mysqluser__', password: '__mysqlpass__', database: '__mysqldb__', timezone: '-03:00' }); global.client.connect();
on main.js a:
require('db_helper');
then on other js files, whenever need update or select call:
global.client(query, data);
i haven't seen code yet, works expected, i'm experiencing random crashes time time, when reloading pages.
is ok use this? crashes related way connect db?
i think it's related because when crash happens, because mysql fails return data, crash happens when parsing result, like:
global.client.query(query, function(err, results, fields) { if (err) throw err; if (results && object.prototype.tostring.call(results) === '[object array]') { var j = result[0].data; } }
most of time, var j has value expect have, when node crashes, var returns empty, despite fact checks (results) consistency before. node crashes saying:
result[0].data undefined
thanks.
edit: crash happens whenever client js file gets updated on server. (after local edit of .js file & server upload via ftp), why?
a more common approach, instead of storing stuff in global
(which makes obscure code, imo), export it:
// db_helper.js var client = module.exports = require('mysql').createconnection({ user: '__mysqluser__', password: '__mysqlpass__', database: '__mysqldb__', timezone: '-03:00' }); client.connect(); // somewhere else var client = require('db_helper');
the reason why code crashes you're not checking empty array:
client.query(query, function(err, results, fields) { if (err) throw err; if (results.length) { // don't need check if it's array var j = results[0].data; ... } }
as reason: guess query you're running gives different results (or rather, no results) on server.
Comments
Post a Comment