我有一个 node.js 脚本,它可以为我执行一些数据库查询并且工作正常。该脚本开始变得有点长,所以我想我可能会开始分解它,并认为将数据库连接代码移到另一个文件是有意义的。
下面是我已移动到另一个文件中然后包含在 require 语句中的代码。
我遇到的问题是脚本底部的“导出”命令。看来函数“dbHandleDisconnectUsers()”导出正常,但变量“dbConnectionUsers”则不然。
脚本错误指的是对象“dbConnectionUsers”的方法(我希望这是正确的终端)丢失,给我的印象是我没有真正传递一个完整的对象。注意:我会包含确切的错误,但我不在机器前面。
var mysql = require('/usr/lib/node_modules/mysql');
// Users Database Configuration
var dbConnectionUsers;
var dbConfigurationUsers = ({
host : 'xxxxx',
user : 'xxxxx',
password : 'xxxxx',
database : 'xxxxxx',
timezone : 'Asia/Singapore'
});
// Users Database Connection & Re-Connection
function dbHandleDisconnectUsers() {
dbConnectionUsers = mysql.createConnection(dbConfigurationUsers);
dbConnectionUsers.connect(function(err) {
if(err) {
console.log('Users Error Connecting to Database:', err);
}else{
dbConnectionUsers.query("SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;");
dbConnectionUsers.query("SET SESSION sql_mode = 'ANSI';");
dbConnectionUsers.query("SET NAMES UTF8;");
dbConnectionUsers.query("SET time_zone='Asia/Singapore';");
}
});
dbConnectionUsers.on('error', function(err) {
console.log('Users Database Protocol Connection Lost: ', err);
if(err.code === 'PROTOCOL_CONNECTION_LOST') {
dbHandleDisconnectUsers();
} else {
throw err;
}
});
}
dbHandleDisconnectUsers();
exports.dbHandleDisconnectUsers() = dbHandleDisconnectUsers();
exports.dbConnectionUsers = dbConnectionUsers;
在核心脚本中我有这个 require 语句:
var database = require('database-connect.js');
我将函数/变量称为
database.dbHandleDisconnectUsers()
database.dbConnectionUsers
最佳答案
忽略其他人在 exports.dbHandleDisconnectUsers() = dbHandleDisconnectUsers()
中指出的语法错误,我将指出 dbConnectionUsers 未初始化。
JavaScript 是一种引用复制传递语言,因此这些行:
var dbConnectionUsers;
exports.dbConnectionUsers = dbConnectionUsers;
本质上是相同的
exports.dbConnectionUsers = undefined;
即使您稍后设置 dbConnectionUsers,也不会影响 exports.dbConnectionUsers
,因为它保存原始 dbConnectionUsers
引用的副本。
在原始数据类型中,它类似于:
var x = 5;
var y = x;
x = 1;
console.log(x); // 1
console.log(y); // 5
有关 require
和 module.exports
如何工作的详细信息,我将向您推荐我最近发布的关于同一主题的答案:
关于node.js - 需要导出变量错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21222907/