Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在node.js中的模块之间传递mysql连接_Javascript_Node.js_Node Modules_Discord.js_Node Mysql - Fatal编程技术网

Javascript 在node.js中的模块之间传递mysql连接

Javascript 在node.js中的模块之间传递mysql连接,javascript,node.js,node-modules,discord.js,node-mysql,Javascript,Node.js,Node Modules,Discord.js,Node Mysql,有几个类似的问题,但我仍然找不到答案。 我正在discord.js中创建一个discord bot,其中每个命令都是一个单独的模块,我不知道如何解决将连接传输到每个文件的问题 这是我的文件树: bot ├─index.js ├─my_modules/ │ └─db.js └─commands/ ├─exampleCommand.js ├─... └─subCommandsForExampleCommand/ ├─subCommand1.js └─... db.js:

有几个类似的问题,但我仍然找不到答案。 我正在discord.js中创建一个discord bot,其中每个命令都是一个单独的模块,我不知道如何解决将连接传输到每个文件的问题

这是我的文件树:

bot
├─index.js
├─my_modules/
│ └─db.js
└─commands/
  ├─exampleCommand.js
  ├─...
  └─subCommandsForExampleCommand/
    ├─subCommand1.js
    └─...
db.js:

const mysql = require(`mysql`);

var conn = mysql.createConnection({
    //user, pass, etc..
});

//some db functions

module.exports = conn;
从node.js文档中:

模块根据其解析的文件名进行缓存。由于模块可能会 根据调用的位置解析为不同的文件名 从节点\模块文件夹加载模块,并不保证 如果需要,require'foo'将始终返回完全相同的对象 解析到不同的文件

在index.js中使用require`./my_modules/database.js`和子命令1.js中使用require`../../my_modules/database.js`可能会返回不同的实例。那么,如何最好地传输文件之间的连接呢


将连接作为参数从索引传递到exampleCommand,从这里传递到子命令1,或者在索引中设置一个全局变量并在其他文件中使用它?

这样做没问题。
这些文档意味着,如果您在不同的位置有多个名为db.js的文件,您可能会根据加载的位置加载不同的文件。也就是说,如果您只需要'moduleName',有一个解析机制,它从当前目录开始,然后移动到其他位置,如节点模块等。只要您有一个db.js,并且没有类似名称的节点模块,您就可以了。

大多数情况下,全局共享数据库连接是个坏主意,特别是如果您有一个长期运行的应用程序。