MERN栈后端运行nodemon server报ERR_MODULE_NOT_FOUND错误
错误产生原因
这个报错是两个问题共同导致的:
- 你项目用的是Node.js ESM模块规范,ESM和旧的CommonJS规范不一样,导入本地相对路径模块时必须写完整的文件后缀,不能省略
.js。看你restaurants.controller.js里的导入语句写的是import RestaurantsDAO from "../dao/restaurants.DAO";,漏了后缀,Node会直接找无后缀的restaurants.DAO文件,找不到就抛模块不存在的错误。你可以对比下其他文件里的导入,比如index.js里导同一个DAO文件是写了.js后缀的,路由文件导controller也写了后缀,只有这一处漏了。 - 你的启动命令写错了。你在backend目录执行
nodemon server时,从日志能看到实际执行的是node server index.js,相当于把server.js当入口文件,还多传了index.js参数,但server.js里只定义了express实例和路由,根本没有数据库连接、启动端口监听的逻辑,这部分代码全在index.js里,就算导入问题修了,用这个命令启动服务也跑不起来。
修复方法
- 先改导入语句:打开
backend/api/restaurants.controller.js,把第一行的DAO导入补全后缀,改成:
import RestaurantsDAO from "../dao/restaurants.DAO.js";
- 再改启动命令:不要执行
nodemon server,直接指定正确的入口文件:
nodemon index.js
如果想简化启动操作,可以打开项目的package.json,在scripts字段加启动配置:
"scripts": { "dev": "nodemon index.js" }
之后执行npm run dev就能正常启动服务。
- 最后做个校验:确认
backend/dao文件夹下确实存在restaurants.DAO.js文件,文件名的大小写完全匹配——Linux和macOS系统对文件名大小写敏感,哪怕是大小写差一个字母,都会被识别成不同文件导致找不到模块。
内容的提问来源于stack exchange,提问作者hu234
相关产品推荐
相关产品推荐

