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

克里斯多夫

看看本Sequelize教程中的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%模型(sequelize,Sequelize) “模式”。几乎所有它们似乎都是直接或间接地从某个非常糟糕的代码示例派生而来,因为...

在我看来,这真是丑陋。有两个变量只能按大小写区分。一个是Sequelize库,另一个是会话或连接(不确定Sequelize使用哪个术语)。我认为具有大写变量是违反编码准则的。接下来,将库引用传递到另一个文件中,这在Node中应该完全没有必要,因为需要在第一次加载时缓存模块。那么,为什么不直接在模型文件中引用Sequelize并仅传递sequelize对象呢?

有人看到这样做有什么充分的理由吗?在此SO帖子中介绍了一种IMO更加干净的方法回答者表示敬意。我只是想知道我是否在这里遗漏了一些明显的东西,我真的应该这样做,还是我可以自由地编写一些更简洁的代码?

亚伦

那真是丑陋。我要做的是在自己的文件中创建一个db并将其导出。

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文档有些过时的东西,所以如果以前是这样,这也不会令我感到惊讶。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章