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
相关产品推荐
相关产品推荐

