导入

你还可以使用import方法将模型定义存储在单个文件中. 返回的对象与导入文件的功能中定义的完全相同. 由于Sequelizev1:5.0的导入是被缓存的,所以当调用文件导入两次或更多次时,不会遇到问题.

  1. // 在你的服务器文件中 - 例如 app.js
  2. const Project = sequelize.import(__dirname + "/path/to/models/project")
  3. // 模型已经在 /path/to/models/project.js 中定义好
  4. // 你可能会注意到,DataTypes与上述相同
  5. module.exports = (sequelize, DataTypes) => {
  6. class Project extends sequelize.Model { }
  7. Project.init({
  8. name: DataTypes.STRING,
  9. description: DataTypes.TEXT
  10. }, { sequelize });
  11. return Project;
  12. }

import方法也可以接受回调作为参数.

  1. sequelize.import('project', (sequelize, DataTypes) => {
  2. class Project extends sequelize.Model {}
  3. Project.init({
  4. name: DataTypes.STRING,
  5. description: DataTypes.TEXT
  6. }, { sequelize })
  7. return Project;
  8. })

这个额外的功能也是有用的, 例如 Error: Cannot find module 被抛出,即使 /path/to/models/project 看起来是正确的. 一些框架,如 Meteor,重载 require,并给出“惊喜”的结果,如:

  1. Error: Cannot find module '/home/you/meteorApp/.meteor/local/build/programs/server/app/path/to/models/project.js'

这通过传入Meteor的require版本来解决. 所以,虽然这可能会失败 …

  1. const AuthorModel = db.import('./path/to/models/project');

… 这应该是成功的 …

  1. const AuthorModel = db.import('project', require('./path/to/models/project'));