Передача соединения mysql между модулями в node.js - PullRequest
0 голосов
/ 01 февраля 2020

Было несколько похожих вопросов, но я до сих пор не могу найти ответ. Я создаю диссон-бота в разногласиях. 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, или установить глобальную переменную в индексе и использовать ее в других файлах?

1 Ответ

1 голос
/ 01 февраля 2020

Хорошо, как ты это сделал. И документы означают, что если у вас есть несколько файлов с именем db.js в разных местах, вы можете загрузить разные файлы в зависимости от того, откуда вы загружаете. Т.е., если вы просто require('moduleName'), есть механизм разрешения, который начинается с текущего каталога, а затем перемещается в другие места, такие как модули узлов и т. Д. c. Если у вас есть один db.js, а также нет узловых модулей с одинаковыми именами, все будет в порядке.

...