Sequelize:需要vs导入

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

// in your server file - eg 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 }) } 

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

 // in your server file - eg 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 

那么,你可以看到你的模型定义需要两件事情:

  1. Sequelize或DataTypes
  2. sequelize

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

两者都需要初始化你的模型,但重要的是要理解的是:其中之一是一个classtype所以它是全球性的,另一个是一个实例,必须创build与您的连接参数。

所以,如果你这样做:

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

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

这是一个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 

你甚至可以改变它,所以你不必在模型本身中要求Sequelize ,但是在定义模型之前你仍然需要创build一个sequelize实例。