Javascript 在node.js中的模块之间传递mysql连接
有几个类似的问题,但我仍然找不到答案。 我正在discord.js中创建一个discord bot,其中每个命令都是一个单独的模块,我不知道如何解决将连接传输到每个文件的问题 这是我的文件树: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:
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,并且没有类似名称的节点模块,您就可以了。大多数情况下,全局共享数据库连接是个坏主意,特别是如果您有一个长期运行的应用程序。