Sequelize:需要vs导入

Ouw*_*ang 6 node.js sequelize.js

在sequlize的文档中,他们使用像这样的导入函数

// in your server file - e.g. app.js
var Project = sequelize.import(__dirname + "/path/to/models/project")

// The model definition is done in /path/to/models/project.js
// As you might notice, the DataTypes are the very same as explained above
module.exports = function(sequelize, DataTypes) {
  return sequelize.define("Project", {
    name: DataTypes.STRING,
    description: DataTypes.TEXT
  })
}
Run Code Online (Sandbox Code Playgroud)

但是,这会有什么问题呢?

// in your server file - e.g. app.js
var Project = require(__dirname + "/path/to/models/project")

// The model definition is done in /path/to/models/project.js
  var Project = sequelize.define("Project", {
    name: Sequelize.STRING,
    description: Sequelize.TEXT
  });
module.exports = Project
Run Code Online (Sandbox Code Playgroud)

Erv*_*dac 8

好吧,你可以看到你的模型定义需要两件事:

  1. Sequelize或DataTypes
  2. sequelize

在你使用sequelize.import('something');它的第一个例子中类似于use require('something')(this, Sequelize);(sequelize实例)

两者都是初始化模型所必需的,但重要的是要理解:其中一个是classtype,因此它是全局的,另一个是实例,必须使用您的连接参数创建.

所以,如果你这样做:

 var Project = sequelize.define("Project", {
    name: Sequelize.STRING,
    description: Sequelize.TEXT
  });
module.exports = Project
Run Code Online (Sandbox Code Playgroud)

续集来自哪里?它必须以某种方式实例化并传递.

以下是require而不是import的示例:

// /path/to/app.js
var Sequelize = require('sequelize');
var sequelize = new Sequelize(/* ... */);
var Project = require('/path/to/models/project')(sequelize, Sequelize);

// /path/to/models/project.js
module.exports = function (sequelize, DataTypes) {
    sequelize.define("Project", {
       name: DataTypes.STRING,
       description: DataTypes.TEXT
    });
};

module.exports = Project
Run Code Online (Sandbox Code Playgroud)

您甚至可以更改它,因此您不必通过在模型本身中要求它来传递Sequelize,但您仍然需要在定义模型之前创建续集实例.