【问题标题】:Why do I get `Cannot read properties of undefined` while trying to import a Sequelize model?为什么在尝试导入 Sequelize 模型时出现“无法读取未定义的属性”?
【发布时间】:2022-12-05 23:52:38
【问题描述】:

这是基于 my previous question 但更简单,因为我发现问题是因为我对 module.exports 做错了什么。我试图弄清楚为什么每当我使用我在另一个文件中创建的模型的任何函数时都会收到 TypeError。我有这个测试代码:
索引.js:

const { Test } = require('./model.js');

(async () => {
  const test = await Test.create({ name: 'test', desc: 'hello world' });

  console.log(test.name);
})();

db-init.js(手动运行):

const { Sequelize, DataTypes } = require('sequelize');

const db = new Sequelize({
  dialect: 'sqlite',
  storage: './database.sqlite',
});

require('./model.js')(db, DataTypes);

db.sync({ force: true }).then(async () => {
  console.log('db connected');
}).catch(console.error);

模型.js:

module.exports = (db, DataTypes) => {
  return db.define('test', {
    name: DataTypes.STRING,
    desc: DataTypes.TEXT,
  });
}

代码应该打印“hello world”,但我得到的是TypeError: Cannot read properties of undefined (reading 'create')。对不起,如果这个问题措辞不当。

【问题讨论】:

    标签: javascript node.js sequelize.js typeerror


    【解决方案1】:

    看起来您正在从 model.js 导出定义模型的函数而不是模型本身。因此,当您尝试在 index.js 中使用 Test.create() 时,Test 未定义。

    要解决此问题,您可以从model.js 导出模型本身并将其直接导入index.js,或者您可以调用当前正在导出的函数并将结果分配给一个变量,然后再使用它。

    这是一个如何从model.js导出模型本身的示例:

    const { Sequelize, DataTypes } = require('sequelize');
    
    const db = new Sequelize({
      dialect: 'sqlite',
      storage: './database.sqlite',
    });
    
    const Test = db.define('test', {
      name: DataTypes.STRING,
      desc: DataTypes.TEXT,
    });
    
    module.exports = { Test };
    

    然后,您可以像这样直接在index.js 中导入模型:

    const { Test } = require('./model.js');
    
    (async () => {
      const test = await Test.create({ name: 'test', desc: 'hello world' });
    
      console.log(test.name);
    })();
    

    或者,您可以保留 model.js 的当前实现并调用导出的函数来获取模型,如下所示:

    const { Sequelize, DataTypes } = require('sequelize');
    
    const db = new Sequelize({
      dialect: 'sqlite',
      storage: './database.sqlite',
    });
    
    const defineTestModel = require('./model.js');
    const Test = defineTestModel(db, DataTypes);
    
    (async () => {
      const test = await Test.create({ name: 'test', desc: 'hello world' });
    
      console.log(test.name);
    })();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-28
      • 2016-01-10
      • 2021-05-05
      • 2021-10-28
      • 1970-01-01
      • 2020-09-04
      • 2020-08-04
      • 2022-01-10
      相关资源
      最近更新 更多