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

Express.js项目本地模块找不到的问题求助

解决Express项目中"can't find module"报错问题

项目背景

  • 技术栈:Express + MySQL + Sequelize,计划后续扩展为MySQL替代MongoDB的MERN栈
  • 通过npm init创建项目,已在package.json中启用ES模块(type: module)

错误详情

  • 错误类型:can't find module,报错指向本地文件../controllers/Users
  • 错误触发位置:routes/index.js中的导入语句

文件结构描述

login_system/
├── config/
│   └── database.js
├── controllers/
│   └── Users.js
├── models/
│   └── UserModel.js
├── routes/
│   └── index.js
├── index.js
└── package.json

关键代码片段

package.json

{
  "name": "login_system",
  "version": "1.0.0",
  "description": "",
  "type": "module",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "bcrypt": "^5.1.0",
    "cookie-parser": "^1.4.6",
    "cors": "^2.8.5",
    "dotenv": "^16.3.1",
    "express": "^4.18.2",
    "jsonwebtoken": "^9.0.1",
    "mysql2": "^3.6.0",
    "sequelize": "^6.32.1"
  }
}

index.js(入口文件)

import express from "express";
import db from "./config/database.js";
import router from "./routes/index.js";

const app = express();

// 创建数据库连接 
try {
  await db.authenticate();
  console.log("Database Connected ...");
} catch (error) {
  console.log(error);
}

app.use(express.json());
app.use(router);

app.listen(5000, () => console.log("server is running at port 5000"));

routes/index.js

import express from "express";
import getUser from "../controllers/Users"; // 错误发生在此处

const router = express.Router();

router.get("/users", getUser);

export default router;

controllers/Users.js

import users from "../models/UserModel";

const getUsers = async (req, res) => {
  try {
    const users_ = await users.findAll();
    res.json(users_);
  } catch (error) {
    console.log(error);
  }
};

export default getUsers;

解决方法

  1. 补全文件扩展名
    因为项目启用了ES模块,导入本地文件必须指定完整扩展名。修改两处导入语句:

    • routes/index.js中改为:
      import getUser from "../controllers/Users.js";
      
    • controllers/Users.js中改为:
      import users from "../models/UserModel.js";
      
  2. 校验路径与文件名大小写
    确认文件系统中controllers/Users.js、models/UserModel.js确实存在,且路径大小写和代码中完全一致(Linux/macOS系统区分文件名大小写)。

  3. 修复顶层await问题
    入口文件中await db.authenticate()属于顶层await,需包裹在异步函数中执行:

    import express from "express";
    import db from "./config/database.js";
    import router from "./routes/index.js";
    
    const app = express();
    app.use(express.json());
    app.use(router);
    
    const initApp = async () => {
      try {
        await db.authenticate();
        console.log("Database Connected ...");
        app.listen(5000, () => console.log("server is running at port 5000"));
      } catch (error) {
        console.error(error);
      }
    };
    
    initApp();
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 17:05:30