Node.js和全局MySQL连接OBJ

Ant*_*Max 0 node.js socket.io node-mysql

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

我有一个db_helper.js,其中包含以下代码:

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

在我的main.js上,我只是做一个:

require('db_helper');
Run Code Online (Sandbox Code Playgroud)

然后在其他js文件上,每当我需要更新或选择时,我只需调用:

global.client(query, data);
Run Code Online (Sandbox Code Playgroud)

我还没有看到这样的代码,但是它可以按预期工作,但是在重新加载页面时,我有时会遇到随机崩溃。

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

我认为这是相关的,因为崩溃发生时是因为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; 
   }
}
Run Code Online (Sandbox Code Playgroud)

在大多数情况下,var j具有我期望的值,但是当节点崩溃时,尽管它以前检查过(结果)一致性,但该var返回空。节点崩溃说:

result[0].data is undefined
Run Code Online (Sandbox Code Playgroud)

谢谢。

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

rob*_*lep 5

一个更常见的方法是global将其导出:

// 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');
Run Code Online (Sandbox Code Playgroud)

代码崩溃的原因是,您没有检查数组:

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;
     ...
   }
}
Run Code Online (Sandbox Code Playgroud)

作为原因:我想您正在运行的查询会在服务器上给出不同的结果(或者没有结果)。