/**/

This is based on my previous question but more simple because I've figured out the issue is because I did something wrong with module.exports. I'm trying to figure out why I get a TypeError whenever I use any function of the model I created in another file. I have this test code:
index.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);

model.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').如果这个问题措辞不好,我很抱歉.

推荐答案

看起来您要从model.js中导出一个定义模型的函数,而不是模型本身.因此,当您try 在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);
})();

Update 要在index.js文件中导入db对象,可以将其导出到db-init.js文件中,然后将其导入index.js文件中.

以下是您如何做到这一点的一个示例:

db-init.js:

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

// Define the db object and export it
const db = new Sequelize({
  dialect: 'sqlite',
  storage: './database.sqlite',
});

module.exports = db;

test.js:

// Import the db object and the Test model
const db = require('./db-init.js');
const { Test } = require('./model.js');

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

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

Javascript相关问答推荐

JavaScript 查找字符串并突出显示

用单个过滤器方法替换嵌套映射数组调用

在Cypress 上获取更小的日志(log)消息

支持菜单props 的自动属性(Vuetify.js)

无法删除 Typescript 中的 EventListener

我如何更改 Mui 中的 TextField 边框半径

调试要在标准Typescript 类周围使用的 try/catch 类decorator . Reflect.ownKeys(target.prototype) 只是 ["constructor"]

在 Javascript 中需要建议 - 每个 div 的新字体系列

Javascript,误解了 CustomHTMLElement 的生命周期:需要澄清

点击不工作但 href 是正确的并且工作

如何在 JavaScript 中使用 querySelector Select 具有特定类的所有子元素,而不考虑它们在 HTML 中出现的顺序?

“在既不是 React 函数组件也不是自定义 React Hook 函数的函数中调用了 useSWR”错误

计算混合数字和字符并在 JS/jQuery 中再次将其连接回来

如何知道消息通过 2 个通道中的哪一个到达 [WebRTC]

当只有一个选项时,在 Select 列表中显示所有选项不起作用

如何在 Javascript/Jquery 中动态创建多维对象

WEB 音频 API 过滤器 - 使用滑块位置更改截止频率

使用 date-fns 在日期和时间之间添加额外的单词

在锦标赛中设置会议的功能

使用 JavaScript 旋转和扩展 Div 以显示网格库