Node.js找不到database模块,数据库模块导出异常求助
解决Node.js数据库模块导入失败及潜在问题
1. 修复导入路径报错
报错提示找不到./database模块,核心原因是Node.js的ES模块要求导入时必须指定完整文件名(包括.js后缀),即使文件在同一目录下也不能省略。
修改app.js中的导入代码:
import db from './database.js';
2. 修复database.js中的动态导入问题
你在database.js里使用import('./db/orders.js')属于动态导入,会返回Promise对象而非直接获取模型函数,直接在forEach中调用model(sequelize, Sequelize)会触发TypeError: model is not a function,需按以下方式修复:
方案一:改用静态导入(推荐)
若模型列表固定,直接用静态导入更简洁:
import OrderModel from './db/orders.js'; let models = [OrderModel];
方案二:用async/await处理动态导入
若必须使用动态导入,需将模型初始化逻辑封装为异步函数并执行:
import Sequelize from 'sequelize' const db = {} const sequelize = new Sequelize('', '', '', { host: 'localhost', port: '8006', dialect: 'mysql', define: { freezeTableName: true, }, pool: { max: 5, min: 0, acquire: 30000, idle: 10000, }, operatorsAliases: false, }) async function initModels() { let models = [ await import('./db/orders.js'), ]; models.forEach(model => { // 动态导入的模块内容默认挂载在default属性下 const seqModel = model.default(sequelize, Sequelize); db[seqModel.name] = seqModel; }); Object.keys(db).forEach(key => { if ('associate' in db[key]) { db[key].associate(db); } }); } // 执行模型初始化 await initModels(); db.sequelize = sequelize; db.Sequelize = Sequelize; export default db;
注意:使用async/await后,app.js导入database.js时需处理返回的Promise,或在database.js中导出初始化完成后的db对象的Promise。
额外提示
确保项目根目录的package.json中设置了"type": "module",否则Node.js会将.js文件默认当作CommonJS模块,无法正常使用import语法。
内容的提问来源于stack exchange,提问作者Denis
相关产品推荐
相关产品推荐

