gpt4 book ai didi

mysql - 为什么所有的 Sequelize 示例模型都是用 Model(sequelize, Sequelize) 实例化的?

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

查看此 Sequelize tutorial 中的 models/blog.js 定义.

module.exports = (sequelize, type) => {
return sequelize.define('blog', {
id: {
type: type.INTEGER,
primaryKey: true,
autoIncrement: true
},
text: type.STRING
})
}

它被这样调用:

const BlogModel = require('./models/blog');
const sequelize = new Sequelize('codementor', 'root', 'root', {...});
const Blog = BlogModel(sequelize, Sequelize);

我搜索了更多的 Sequelize 示例,并在可能至少 90% 的示例中找到了 Model(sequelize, Sequelize) “模式”。几乎所有这些都直接或间接地源自一些非常糟糕的代码示例,因为...

这对我来说真的很难看。有两个变量仅按大小写区分。其中一个是 Sequelize 库,另一个类似于 session 或连接(不确定 Sequelize 使用哪个术语)。我认为使用大写变量是违反编码准则的。接下来,一个库引用被传递到另一个文件中,这在 Node 中应该是完全不必要的,因为 requires 模块在第一次加载时被缓存。那么为什么不直接在模型文件中引用 Sequelize 而只传递 sequelize 对象呢?

有人认为这样做有什么好的理由吗? SO post 中描述了一种 IMO 更简洁的方法.感谢回答者。我只是想知道我是否遗漏了一些明显的东西,我真的应该这样做,或者我是否可以自由地编写一些更清晰的代码?

最佳答案

那真的很丑。我所做的是在它自己的文件中创建一个数据库并将其导出。

const db = new Sequelize(
process.env.DATABASE_URL || `postgres://localhost:5432/${databaseName}`,
)

module.exports = db

在 blog.js 文件中,我将导入它并执行如下操作:

const Sequelize = require('sequelize')
const db = require('../db')

const blog = db.define('blog', {
your_field_name_here: {
type: your_sequelize_type_here
},
... and so on
})

module.exports = blog

不完全确定他们为什么那样做,但我发现以这种方式定义模型更清晰,它应该可以实现您想要实现的目标。 Sequelize 文档中有一些过时的内容,所以如果事情过去是这样,我也不会感到惊讶。

关于mysql - 为什么所有的 Sequelize 示例模型都是用 Model(sequelize, Sequelize) 实例化的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51489136/

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