node.js - 需要导出变量错误

标签 node.js

我有一个 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

有关 requiremodule.exports 如何工作的详细信息,我将向您推荐我最近发布的关于同一主题的答案:

Behavior of require in node.js

关于node.js - 需要导出变量错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21222907/

相关文章:

node.js - 我应该在插入到 MongoDB 之前解析 JSON 数据吗?

javascript - 如何从 setTimeout 回调发送 http 响应 - express

javascript - 类型 `user` 上不存在属性 `Session & Partial<SessionData>`

javascript - 在浏览器中显示图像

node.js - 发布严格要求最低 Node 版本的 npm 包

javascript - 如何停止在 node.js 中获取此 ReferenceError?

javascript - 创建在 Express 请求中返回的错误消息的正确方法是什么?

node.js - 将 Node 和 MongoDB 打包到应用程序中以安装在桌面中。

javascript - 合并两个列表 LeetCode

node.js - 在 Ubuntu 14.04 上按照最新的 nodejs 安装步骤有什么问题?