导入
你还可以使用import
方法将模型定义存储在单个文件中. 返回的对象与导入文件的功能中定义的完全相同. 由于Sequelizev1:5.0
的导入是被缓存的,所以当调用文件导入两次或更多次时,不会遇到问题.
// 在你的服务器文件中 - 例如 app.js
const Project = sequelize.import(__dirname + "/path/to/models/project")
// 模型已经在 /path/to/models/project.js 中定义好
// 你可能会注意到,DataTypes与上述相同
module.exports = (sequelize, DataTypes) => {
class Project extends sequelize.Model { }
Project.init({
name: DataTypes.STRING,
description: DataTypes.TEXT
}, { sequelize });
return Project;
}
import
方法也可以接受回调作为参数.
sequelize.import('project', (sequelize, DataTypes) => {
class Project extends sequelize.Model {}
Project.init({
name: DataTypes.STRING,
description: DataTypes.TEXT
}, { sequelize })
return Project;
})
这个额外的功能也是有用的, 例如 Error: Cannot find module
被抛出,即使 /path/to/models/project
看起来是正确的. 一些框架,如 Meteor,重载 require
,并给出“惊喜”的结果,如:
Error: Cannot find module '/home/you/meteorApp/.meteor/local/build/programs/server/app/path/to/models/project.js'
这通过传入Meteor的require
版本来解决. 所以,虽然这可能会失败 …
const AuthorModel = db.import('./path/to/models/project');
… 这应该是成功的 …
const AuthorModel = db.import('project', require('./path/to/models/project'));