【问题标题】:Passing the mysql connection between modules in node.js在 node.js 中的模块之间传递 mysql 连接
【发布时间】:2020-05-17 23:15:25
【问题描述】:

有几个类似的问题,但我仍然找不到答案。 我在 discord.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 文档:

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

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

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

【问题讨论】:

  • 大多数情况下,全局共享数据库连接是个坏主意,尤其是当您有一个长时间运行的应用程序时。

标签: javascript node.js node-modules discord.js node-mysql


【解决方案1】:

你的做法很好。 并且文档意味着如果您在不同的地方有多个名为 db.js 的文件,您可能会碰巧加载不同的文件,具体取决于您从哪里加载。 IE。如果你只是require('moduleName') 有一个解析机制,它从当前目录开始,然后移动到其他地方,如节点模块等。只要你有一个db.js 并且没有类似命名的节点模块,你应该没问题。

【讨论】:

    猜你喜欢
    • 2016-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-16
    • 2018-09-10
    • 2020-03-18
    • 1970-01-01
    相关资源
    最近更新 更多