2013-07-17 99 views
0

我是一个初学Node.js的人,是否可以使用MySQL作为全局变量?Node.js和全局MySQL连接OBJ

我有这个代码里面db_helper.js:

global.client = require('mysql').createConnection({ 
    user: '__mysqluser__', 
    password: '__mysqlpass__', 
    database: '__mysqldb__', 
    timezone: '-03:00' 
}); 
global.client.connect(); 

在我main.js我只是做一个:

require('db_helper'); 

然后在其他js文件,每当我需要更新或选择我只要致电:

global.client(query, data); 

我没有见过任何像这样的代码还,但它正常工作,但我遇到随机不时崩溃,重新加载页面时。

可以像这样使用它吗?我的崩溃与我连接到数据库的方式有关吗?

我认为这是相关的,因为当碰撞发生时,是因为MySQL不能返回数据,但分析结果时死机情况,如:

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

大多数时候,VARĴ有我期望它具有的值,但是当节点崩溃时,尽管它在之前检查(结果)一致性,但该变量返回为空。节点崩溃说:

result[0].data is undefined 

谢谢。

编辑:每当客户端js文件在服务器上更新时发生崩溃。 (在通过FTP上传服务器上传的.js文件&的本地编辑后),为什么?

回答

4

更常见的做法,而不是存储在global的东西(这使得晦涩代码,IMO),将其导出:

// 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'); 

为什么你的代码崩溃的原因是,你不检查的数组:

client.query(query, function(err, results, fields) { 
    if (err) throw err; 
    if (results.length) { // don't need to check if it's an array 
    var j = results[0].data; 
    ... 
    } 
} 

至于原因:我猜你正在运行的查询给出不同的结果(或者更确切地说,没有结果)您SERV呃。

+0

介绍为什么我不应该使用全局变量?我的意思是,它的存在是有原因的,它可以按照预期工作而不使用出口(这是一个很好的方法btw)。 –

+0

@AntonioMax的我有一个全局变量的主要问题之一是,他们可以在任何地方定义,使得它真的很难跟踪他们进入存在。对于一个可能不是问题的小型项目,它可以在大型项目中使用。 – robertklep

+0

是的,这是一个非常小的项目,大约70行代码,这个node.js非常整洁。无论如何,谢谢你的回答。我有一个使用mysql pooling和long pooling的崩溃临时修复程序。我将在稍后更新原文,谢谢。 –