0

我是 Node.js 的初学者,可以使用 MySQL 作为全局变量吗?

我有一个 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 文件上,每当我需要 UPDATE 或 SELECT 时,我只需调用:

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 j具有我期望的值,但是当节点崩溃时,这个 var 返回空,尽管它之前检查(结果)一致性。节点崩溃说:

result[0].data is undefined

谢谢。

编辑:只要客户端 js 文件在服务器上更新,就会发生崩溃。(在本地编辑 .js 文件并通过 FTP 上传服务器后),为什么?

4

1 回答 1

5

一种更常见的方法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;
     ...
   }
}

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

于 2013-07-17T20:27:25.360 回答