Sequelize.js:sequelize.define 和 model.init 有什么区别?

Jak*_*ake 17 sequelize.js

文件没有解释sequelize.define和Model.init之间的差异。它所说的只是Internally, sequelize.define calls Model.init

在选择使用哪一种时,我需要考虑哪些事项?两者之间的主要区别是什么,选择一个而不是另一个的后果是什么?似乎 sequelize.init 是文档中的首选方法 - 为什么会这样?

Dil*_*lon 7

当我遇到这个问题时,我最近也在想同样的事情。我做了一些进一步的调查,发现文档中解释的一些额外的细节在这里可能有用。

翻译:博士

总体而言,差异与语法密切相关,使用sequelize.defineModel.init归结为个人喜好。我不认为一个比另一个更受欢迎,特别是因为Sequelize CLI 工具使用该sequelize.define方法生成模型定义,并且没有在任何地方明确说明。

在 Sequelize 中可以用两种等效的方式定义模型:

  1. 在定义上调用 sequelize.define(modelName, attributes, options) API 文档

  2. 在 init 上扩展模型和调用 init(attributes, options) API 文档

定义模型后,它可以通过模型名称在 sequelize.models 中使用。

正如您所提到的和文档中所述:

在内部,sequelize.define 调用 Model.init,因此两种方法本质上是等效的。

  • 但在打字稿中,两者返回不同的类型。 (3认同)
  • Sequelize-CLI 使用 .init() 生成模型定义,扩展模型。我认为两者都有效,但是我遇到的问题是它收到一些打字稿错误(即使您没有使用打字稿)。该错误不会破坏任何东西,但非常烦人。使用定义则不会。我认为这取决于您是函数式程序员还是 OOP 程序员。 (3认同)