ES模块下Express无法识别为函数的问题排查请求
问题排查与解决
核心问题是你导入Express的语法错误:Express的ES模块默认导出就是express构造函数,不需要从导入的pkg对象里解构express属性,你当前的写法会导致express变量是undefined,自然无法调用它创建app或Router。
修正后的主文件代码
import express from 'express'; import dotenv from 'dotenv' import { Connection } from './database/db.js'; import router from './routes/route.js'; dotenv.config(); // 从环境变量获取账号密码(原代码里USERNAME、PASSWORD未定义) const USERNAME = process.env.DB_USERNAME; const PASSWORD = process.env.DB_PASSWORD; const app = express(); app.use('/', router) const PORT = 4000; app.listen(PORT,() =>{ console.log(`server is running on port: ${PORT}`) }); Connection(USERNAME, PASSWORD);
修正后的router.js代码
import express from 'express'; // 记得导入signupUser函数,原代码里未导入会报错 import { signupUser } from '../controllers/your-controller-file.js'; const router = express.Router() router.post('/signup',signupUser); export default router;
额外注意事项
- 确保
.env文件里正确定义了DB_USERNAME和DB_PASSWORD,dotenv才能正常读取 signupUser函数要从对应的控制器文件正确导入,避免出现未定义错误
内容的提问来源于stack exchange,提问作者zenitsu
相关产品推荐
相关产品推荐

