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;
解决方法
补全文件扩展名
因为项目启用了ES模块,导入本地文件必须指定完整扩展名。修改两处导入语句:routes/index.js中改为:import getUser from "../controllers/Users.js";controllers/Users.js中改为:import users from "../models/UserModel.js";
校验路径与文件名大小写
确认文件系统中controllers/Users.js、models/UserModel.js确实存在,且路径大小写和代码中完全一致(Linux/macOS系统区分文件名大小写)。修复顶层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
相关产品推荐
相关产品推荐

