Было несколько похожих вопросов, но я до сих пор не могу найти ответ. Я создаю диссон-бота в разногласиях. js, где каждая команда - это отдельный модуль, и я не знаю, как решить перенести соединение с каждым файлом.
Это мое файловое дерево:
bot
├─index.js
├─my_modules/
│ └─db.js
└─commands/
├─exampleCommand.js
├─...
└─subCommandsForExampleCommand/
├─subCommand1.js
└─...
дБ. js:
const mysql = require(`mysql`);
var conn = mysql.createConnection({
//user, pass, etc..
});
//some db functions
module.exports = conn;
Из документации node.js:
Модули кэшируются на основе их разрешенного имени файла. Поскольку модули могут разрешать разные имена файлов в зависимости от местоположения вызывающего модуля (загрузка из папок node_modules), не гарантируется, что require ('foo') всегда будет возвращать один и тот же объект, если он будет разрешен в разных файлах. .
Использование require(`./my_modules/database.js`)
в index.js
и require(`../../my_modules/database.js`)
в subCommand1.js
может возвращать разные экземпляры. Так как лучше всего передать соединение между файлами?
Передать соединение в качестве аргумента из index
в exampleCommand
и отсюда в subCommand1
, или установить глобальную переменную в индексе и использовать ее в других файлах?