You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node执行dbinit.js提示找不到models/currencyshop.js模块怎么办?

解决Node.js模块找不到错误(Cannot find module 'models/currencyshop.js')

问题根源

你的代码存在两个核心问题:

  • 模块路径错误:Node.js加载本地模块时,必须使用相对路径(以./或../开头),否则会默认去node_modules目录查找第三方包,而非本地文件。
  • DataTypes未定义:代码中使用了DataTypes但未从Sequelize中引入,后续执行也会触发报错。

解决方案

1. 修正模块引入路径

根据你的项目结构调整路径:

  • 如果dbinit.js和models文件夹在同一根目录下:
    将require('models/currencyshop.js')改为require('./models/currencyshop.js')
  • 如果models文件夹在Mr.House目录下(和你引入Users.js的路径对应):
    将require('models/currencyshop.js')改为require('./Mr.House/models/currencyshop.js')

2. 引入DataTypes

在代码顶部添加DataTypes的解构引入:

const Sequelize = require('sequelize');
const { DataTypes } = Sequelize; // 新增这行

3. 检查文件名大小写

确保本地文件的文件名(包括大小写)和代码中的引用完全一致,Linux/macOS系统对文件名大小写敏感,Windows则不敏感,避免跨环境报错。

修正后的完整代码

const Sequelize = require('sequelize');
const { DataTypes } = Sequelize; // 引入DataTypes

const sequelize = new Sequelize('database', 'username', 'password', {
    host: 'localhost',
    dialect: 'sqlite',
    logging: false,
    storage: 'database.sqlite',
});

// 假设models在Mr.House目录下,使用相对路径
const CurrencyShop = require('./Mr.House/models/currencyshop.js')(sequelize, DataTypes);
require('./Mr.House/models/Users.js')(sequelize, DataTypes);
require('./Mr.House/models/UserItems.js')(sequelize, DataTypes);

const force = process.argv.includes('--force') || process.argv.includes('-f');

sequelize.sync({ force }).then(async () => {
    const shop = [
        CurrencyShop.upsert({ name: 'Tea', cost: 1 }),
        CurrencyShop.upsert({ name: 'Coffee', cost: 2 }),
        CurrencyShop.upsert({ name: 'Cake', cost: 5 }),
    ];

    await Promise.all(shop);
    console.log('Database synced');

    sequelize.close();
}).catch(console.error);

内容的提问来源于stack exchange,提问作者bambusy jedzą pandy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 06:59:58