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
那么,你可以看到你的模型定义需要两件事情:
- Sequelize或DataTypes
- 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实例。