【问题标题】:How to get model from sequelize.model after use sequelize-cli使用 sequelize-cli 后如何从 sequelize.model 获取模型
【发布时间】:2018-06-10 09:08:17
【问题描述】:

我使用 sequelize-cli 为模型 Student 自动生成代码:

module.exports = (sequelize, DataTypes) => {
  var _stu = sequelize.define('stu', {
    name: DataTypes.STRING,
    password: DataTypes.STRING,
    gender: DataTypes.INTEGER,
  }, {
    classMethods: {
      associate: function(models) {
        // associations can be defined here
      }
    }
  });
  return _stu
};

我的问题是

  1. 如何获取名为stu 的模型?因为sequelize 是在函数签名中定义的。

sequelize model:generate时,sequelize读取config.json中的配置,其中dbname,passowrd都指定了。

  1. 函数签名中的sequelize 如何知道数据库连接配置、名称、密码等,因为我没有在这个 js 文件中指定。

【问题讨论】:

    标签: node.js sequelize.js sequelize-cli


    【解决方案1】:

    问题 1 的答案: “sequelize.import” 将完成这项工作。

    试试这个代码:

    const Sequelize = require('sequelize')
    const sequelize = new Sequelize(...)
    
    const stu = sequelize.import('./models/stu')
    
    stu.findAll.then(...)
    

    【讨论】:

      【解决方案2】:

      我让它工作的方式是使用require() 函数导入模型,然后使用所需的参数调用它。

      说明

      通过 require 函数,您将获得另一个返回模型的函数。

      module.exports = (sequelize, DataTypes) => {
        const stu = sequelize.define('stu', {
          // ...database fields
        }, {});
        stu.associate = function(models) {
          // associations can be defined here
        };
        return sty;
      } // note that module.exports is a function
      

      现在,这个函数需要初始化的sequelize对象和DataTypes object,所以你只需要传递sequelizeSequelize.DataTypes的实例,然后它就会返回你的模型,例如:

      const Sequelize = require('sequelize');
      const sequelize = new Sequelize(...);
      
      const Stu = require('./models/stu')(sequelize, Sequelize.DataTypes);
      

      最后,您可以使用Stu.findAll() 获取数据库行。

      希望对你有帮助。

      【讨论】:

      • 那以后怎么处理关联(associate)?
      【解决方案3】:

      当您通过 CLI 生成模型时,它会创建一个方便的 models/index.js 文件,该文件会为您处理传入的 Sequelize 实例。您可以通过 ES6 解构来简单地要求精选的现有模型,如下所示:

      var { stu } = require("./models");
      
      stu.findAll().then(...);
      

      或者,您可以一次全部要求它们,然后根据需要访问特定模型:

      var models = require("./models");
      
      models.stu.findAll().then(...);
      

      【讨论】:

        猜你喜欢
        • 2015-03-06
        • 2015-10-12
        • 2019-08-10
        • 2019-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-20
        相关资源
        最近更新 更多