gpt4 book ai didi

mysql - 使用 Node + Express + Sequelize +(Mysql 或 Postgres)构建 SaaS 产品

转载 作者:行者123 更新时间:2023-11-29 17:30:36 25 4
gpt4 key购买 nike

我们计划构建一个基于 SaaS 的产品,所以主要是经过大量搜索后,我们发现设计 SaaS 产品有三种数据库方法。

  1. 每个租户都有单独的数据库
  2. 每个租户都有单独的架构
  3. 所有租户共享架构和一个数据库(但将使用tenant_id进行查询)

所以我们计划进入选项 2,

所以最初我们使用Mysql,但是我们没有找到如何在mysql中获取多个模式,我们使用Sequelize作为ORM。

经过大量谷歌搜索,我们发现许多基于 Multi-Tenancy 的产品正在使用 postgresql 来实现强大的模式方法,因此我们尝试了这个库:

https://github.com/westmark/sequelize-multi-tenant-enhancer

我们尝试使用该库来实现基于多种模式的方法,但数据是根据租户的说法没有显示,我还在 github 中打开了一个问题,

因此,如果您有任何想法或任何可以帮助我构建 SaaS 产品的帖子,请帮助我

注意:我的堆栈:Node + Express + Angular + Mysql 或 Postgres

我的问题是如何在 postgres 中使用多个模式?

最佳答案

最后我决定使用选项 2,并且我迁移到 Postgresql 而不是 mysql,因为 Postgresql 具有基于模式的方法!

现在是我的最终代码:

const postgresDB = new Sequelize('postgres://localhost:5432/test_enduser');

postgresDB.authenticate().then((err) => {
if (err) {
console.log('There is connection in ERROR.');
} else {
console.log('Postgres Connection has been established successfully');
}
});

postgresDB.define('inventory', {
name: Sequelize.STRING,
});

const createSchema = () => {
Business.findAll({
raw: true,
}).then((data) => {
data.forEach((client) => {
postgresDB.createSchema(client.code).then(() => {
Object.keys(postgresDB.models).forEach((currentItem) => {
postgresDB.models[currentItem].schema(client.code).sync();
});
// new schema is created
console.log('Postgres schema created');
}).catch((err) => {
console.log(err.message);
});
});
});
};
createSchema();


// apis
exports.getAllBusiness = (req, res) => {
postgresDB.models.inventory.schema(req.user.code).findAll()
.then((results) => {
res.send(results);
});
};

exports.postBusiness = (req, res) => {
const user = {
name: req.body.name,
};
postgresDB.models.inventory.schema(req.user.code).create(user)
.then(data => res.status(200).send(data))
.catch(Sequelize.ValidationError, err => res.status(422).send(err.errors[0].message))
.catch(err => res.status(400).send(err.message));
};

我正在设置我的 postgres 连接

只是为了测试,我正在创建一个名为“库存”的表

在我的应用程序中,在线来了,他注册了,在注册时,我将业务代码存储到我的业务表中(业务表来自单独的数据库,这是一个 super 主应用程序数据库),所以我找到了业务代码并在 postgres 中循环并创建动态模式

现在看看我的API,我正在基于req.user.code(来自登录 session )进行CRUD,并且我最终根据特定模式匹配显示数据,

所以最后我为每个客户端都有了干净的单独模式

谢谢!

关于mysql - 使用 Node + Express + Sequelize +(Mysql 或 Postgres)构建 SaaS 产品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50690280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com