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

