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,需完成以下操作:
- 删除
package.json中的"type": "module"(默认即为CommonJS) - 修改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
- 在App.js中用
require导入:
const UserModel = require('./models/UserModel')
内容的提问来源于stack exchange,提问作者GoldenBags
相关产品推荐
相关产品推荐

