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

Node提示找不到MongoDB模型模块?求原因及解决办法

MERN项目ESM模块导入错误解决方案

问题背景

搭建基础MERN项目,UserModel代码如下:

import mongoose from "mongoose"

const UserSchema = new mongoose.Schema({
  name: String,
  email: String,
  password: String
})

const UserModel = mongoose.model('Users', UserSchema)

module.exports = UserModel

在package.json中添加了"type": "module",,并通过import UserModel from './models/UserModel'导入UserModel,运行nodemon时出现以下错误:

node:internal/process/esm_loader:40
      internalBinding('errors').triggerUncaughtException(
                                ^

Error [ERR_MODULE_NOT_FOUND]: Cannot find module '/home/bian/Documents/WebDev/fullstack/demoapp/models/UserModel' imported from /home/bian/Documents/WebDev/fullstack/demoapp/App.js
Did you mean to import ../models/UserModel.js?
    at new NodeError (node:internal/errors:406:5)
    at finalizeResolution (node:internal/modules/esm/resolve:233:11)
    at moduleResolve (node:internal/modules/esm/resolve:845:10)
    at defaultResolve (node:internal/modules/esm/resolve:1043:11)
    at ModuleLoader.defaultResolve (node:internal/modules/esm/loader:383:12)
    at ModuleLoader.resolve (node:internal/modules/esm/loader:352:25)
    at ModuleLoader.getModuleJob (node:internal/modules/esm/loader:228:38)
    at ModuleWrap.<anonymous> (node:internal/modules/esm/module_job:85:39)
    at link (node:internal/modules/esm/module_job:84:36) {
  url: 'file:///home/bian/Documents/WebDev/fullstack/demoapp/models/UserModel',
  code: 'ERR_MODULE_NOT_FOUND'
}

尝试将package.json中的类型改为commonjs并使用require导入,问题仍未解决。

解决方案

1. 统一ESM模块语法

当package.json设置"type": "module"时,Node.js会将所有.js文件视为ES模块,此时不能混用module.exports和import。需要把UserModel中的导出语句改为ES模块格式:

// UserModel.js
import mongoose from "mongoose"

const UserSchema = new mongoose.Schema({
  name: String,
  email: String,
  password: String
})

const UserModel = mongoose.model('Users', UserSchema)

export default UserModel

2. 导入时添加文件扩展名

ES模块规范要求导入时必须显式指定文件扩展名(.js),修改App.js中的导入语句:

import UserModel from './models/UserModel.js'

同时注意路径层级是否正确:

  • 若App.js在项目根目录,models文件夹也在根目录,使用./models/UserModel.js
  • 若App.js在子目录(如src/App.js),则需使用../models/UserModel.js

3. 检查文件命名和路径

  • 确认UserModel的文件名确实是UserModel.js(Linux系统区分文件名大小写,注意拼写一致)
  • 验证models文件夹存在,且路径拼写无错误

4. 切换回CommonJS规范(可选)

如果想改用CommonJS,需完成以下操作:

  1. 删除package.json中的"type": "module"(默认即为CommonJS)
  2. 修改UserModel为CommonJS格式:
// UserModel.js
const mongoose = require("mongoose")

const UserSchema = new mongoose.Schema({
  name: String,
  email: String,
  password: String
})

const UserModel = mongoose.model('Users', UserSchema)

module.exports = UserModel
  1. 在App.js中用require导入:
const UserModel = require('./models/UserModel')

内容的提问来源于stack exchange,提问作者GoldenBags

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 07:40:16