ES6模块导入Express Router时出现ERR_MODULE_NOT_FOUND错误求助
解决Node.js ES模块下的ERR_MODULE_NOT_FOUND错误
问题描述
已在package.json中设置"type": "module",但导入路由模块时始终出现ERR_MODULE_NOT_FOUND错误,尝试默认导出和命名导出均无法解决。
相关代码
productRoutes.js
import express from 'express'; const router = express.Router(); router.get('/', (req, res) => { res.status(200).json({ msg: 'get products' }); }); export default router;
server.js
import 'dotenv/config'; import express from 'express'; import mongoose from 'mongoose'; import routes from './api/v1/routes/productRoutes'; // express app const app = express(); // middleware app.use(express.json()); app.use(express.urlencoded({ extended: true })); app.use((req, res, next) => { console.log(req.path, req.method); next(); }); // routes app.use('/api/products', routes); // connect to db mongoose .connect(process.env.MONGO_URI, { useNewUrlParser: true, useUnifiedTopology: true, }) .then(() => { console.log('connected to database'); // listen to port app.listen(process.env.PORT, () => { console.log('listening for requests on port', process.env.PORT); }); }) .catch((err) => { console.log(err); });
解决方案
修正导入路径的文件扩展名
ES模块要求导入本地文件时必须显式添加扩展名,将server.js中的导入语句修改为:import routes from './api/v1/routes/productRoutes.js';CommonJS允许省略扩展名,但ES模块不支持此特性,这是触发该错误最常见的原因。
检查路径大小写与实际文件匹配
Node.js ES模块对文件路径大小写敏感,确保导入路径中的目录名、文件名和实际文件系统中的完全一致(比如productRoutes.js不能写成ProductRoutes.js)。验证package.json的type字段格式
确认package.json中的type字段是正确的JSON格式,键值对用冒号分隔,而非等号:{ "type": "module" }确认目录结构与导入路径对应
检查server.js的位置和导入路径是否匹配,比如server.js在项目根目录时,./api/v1/routes/productRoutes.js对应的目录结构必须是根目录下存在api/v1/routes文件夹,且该文件夹下有productRoutes.js文件。
内容的提问来源于stack exchange,提问作者lorem Marston
相关产品推荐
相关产品推荐

