我在这里使用mean stack m=mysql构建一个saas产品
我使用sequelize作为orm for mysql,我的连接:
const sequelize = new Sequelize('smallscale_superapp', 'root', 'root1', {
host: '127.0.0.1',
port: 3306,
dialect: 'mysql',
logging: false,
});
例如,我有一个管理超级应用程序,所以我创建了一个业务,例如业务代码
“001ABCD”,此业务代码存储在我的主管理数据库中,然后我告诉我的所有客户端转到一个名为“example.com”的特定URL。
因此,如果他们输入url,主页将看起来像slack.com有一个输入框,在名为example.com的硬编码值之后
所以现在我的客户在输入框中输入了我创建的业务代码并存储在我的主数据库中。
将业务代码放入输入框后,将打开一个名为“001abcd.example.com”的新子域(我正在检查主数据库中的业务代码是否匹配,如果匹配,则创建动态子域)。
因此,如果一切顺利,在创建子域客户端页面后,将显示为登录屏幕,在那里他们需要注册,注册详细信息需要在那里动态数据库
注释
:创建业务时,我将在主数据库表中获取客户端数据库、用户名、主机和密码。
如何使用sequencemysql来实现这一点?
如何在客户端登录的基础上获得动态连接的续集连接?
正如我之前所说,我在数据库中有客户机dbname等,我正试图创建这样的连接:
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);
});
变量
后遗症
在函数内部,所以我无法访问?全球地。
所以我把变量设为全局变量,但有一个问题
我在函数中有sequellizeclient变量,这个函数只在url中输入我的域后执行,
但是sequenceclient.sync()不在函数内部,所以当我启动node server.js时,它会抛出错误:
sequelizeClient.authenticate().then((err) => {
[0] ^
[0]
[0] TypeError: Cannot read property 'authenticate' of undefined