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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 10:01:46