我是Node.js的初学者,使用MySQL作为全局var是否可以?
我有一个带有此代码的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文件在服务器上更新,就会发生崩溃。 (通过FTP本地编辑.js文件和服务器上传后),为什么?
答案 0 :(得分: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;
...
}
}
原因是:我猜你正在运行的查询会在服务器上产生不同的结果(或者更确切地说,没有结果)。