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

Express.js导入Mongoose模型提示Cannot use import statement outside a module如何解决

解决方案

1. 修复模块语法混用问题

报错核心是同时混用了CommonJS(require/module.exports)和ES Module(import/export)两种模块规范,Node.js不支持两种语法混用,可任选以下一种方案统一语法:

方案A:全量使用ES Module规范

  • 先在项目根目录的package.json中添加配置项:"type": "module"
  • 修改category模型代码:
import mongoose from "mongoose";

const descSchema = mongoose.Schema({
  name: {
    type: String,
    required: true,
  },
  // 原代码拼写错误修正,原有descripton少了字母i
  description: {
    type: String,
  },
});

export default mongoose.model("descData", descSchema);
  • 修改item模型代码,注意ES Module导入本地文件需要补全后缀名:
import mongoose from "mongoose";
import descData from "./category.js";

const itemSchema = mongoose.Schema({
  name: {
    type: String,
    required: true,
  },
  created: {
    type: String,
    required: true,
    unique: true,
  },
  // 这里同时修复关联写法错误
  category: [{
    type: mongoose.Schema.Types.ObjectId,
    ref: "descData"
  }],
  quantity: {
    type: [String],
    required: true,
  },
});

export default mongoose.model("itemData", itemSchema);

方案B:全量使用CommonJS规范

不需要修改package.json,直接调整导入导出语法即可:

  • 修改item模型代码,把import改为require:
const mongoose = require("mongoose");
const descData = require("./category");

const itemSchema = mongoose.Schema({
  name: {
    type: String,
    required: true,
  },
  created: {
    type: String,
    required: true,
    unique: true,
  },
  // 修复关联写法错误
  category: [{
    type: mongoose.Schema.Types.ObjectId,
    ref: "descData"
  }],
  quantity: {
    type: [String],
    required: true,
  },
});

module.exports = mongoose.model("itemData", itemSchema);
  • category模型仅需要修正字段拼写错误即可,不需要额外调整导入导出语法。

2. Mongoose关联规则说明

原有代码中category: [descData]的写法不符合规范,Mongoose跨模型关联需要通过ObjectId+ref的方式实现,后续查询时调用.populate('category')即可自动关联拉取对应分类的完整数据。

内容的提问来源于stack exchange,提问作者Miloš Milutinov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 23:39:03