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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 17:15:16