Я создаю SaaS-продукт с использованием стека MEAN. M = mysql
Я использую sequelize в качестве ORM для mysql, мое соединение:
const sequelize = new Sequelize('smallscale_superapp', 'root', 'root1', {
host: '127.0.0.1',
port: 3306,
dialect: 'mysql',
logging: false,
});
Например, у меня есть один супер администраторприложение, поэтому я создаю один бизнес, например, бизнес-код с именем «001abcd», этот бизнес-код хранится в моей основной базе данных администратора, а затем я сказал всем своим клиентам перейти на один конкретный URL-адрес, называемый «example.com».
Так что, если они введут URL-адрес, домашняя страница будет выглядеть как slack.com, там будет одно поле ввода и после жестко закодированного значения example.com
Так что теперь мой клиент в поле ввода они помещаютбизнес-код, который я создал и сохранил в своей основной базе данных.
После помещения бизнес-кода в поле ввода откроется новый субдомен под названием «001abcd.example.com» (я проверяю, является ли бизнес-кодсовпадения в моей основной базе данных, если совпадает, я создаю динамические субдомены)
ТАК если все хорошо, после создания клиентской страницы субдомена будет отображаться экран входа в систему, где они должны зарегистрироваться, и детали регистрации должны быть там динамически, база данных
ПРИМЕЧАНИЕ : я получаю клиентскую базу данных, имя пользователя, хост, пароль в моей основной таблице базы данных при создании бизнеса.
Как это сделать с помощью sequelize mysql?
Как получить последовательное соединение для динамического подключения на основе логина клиента?
Как я уже говорил, у меня есть клиентское имя базы данных ... и т. Д. В моей базе данныхпытаясь создать соединение следующим образом:
exports.dynamicDatabase = (req, res) => {
const { code } = req.params;
Business.find({
where: { code },
raw: true,
})
.then((data) => {
const sequelizeClient = new Sequelize(data.dbname, data.dbusername, data.dbpassword, {
host: data.dbhost,
port: 3306,
dialect: 'mysql',
logging: false,
});
})
.catch((err) => { res.status(400).send(err.message); });
};
Теперь за пределами этой функции я пытаюсь синхронизировать таблицы, например:
sequelizeClient.authenticate().then((err) => {
if (err) {
console.log('There is connection in ERROR.');
} else {
console.log('Dynamic MYSQL Connection has been established successfully');
}
});
sequelizeClient.sync().then(() => {
console.log('Dynamic Missing Table Created');
}, (err) => {
console.log('An error occurred while creating the table:', err.message);
});
Переменная sequelizeClient isвнутри функции, поэтому я не могу получить доступ?глобально.
Итак, я делаю переменную глобально, но есть одна проблема
У меня есть переменная sequelizeClient внутри функции, эта функция будет выполняться только после ввода моего домена в URL,
НоsequelizeClient.sync () не находится внутри функции, поэтому, когда я запускаю узел server.js, он выдает мне ошибку:
sequelizeClient.authenticate().then((err) => {
[0] ^
[0]
[0] TypeError: Cannot read property 'authenticate' of undefined