Express路由报错:Route.get()需回调函数却获[object Undefined]求解决
问题排查:Route.get() 回调函数未定义错误
我尝试给最后一个router.route('/profile')使用相同的function (req, res)写法,但无法生效,持续收到错误:GET + PUT - Route.get() requires a callback function but got a [object Undefined],请帮忙排查可能存在的问题!
原代码:
const express = require("express"); const router = express.Router(); const { authUser, registerUser, logoutUser, getUserProfile, updateUserProfile, } = require("../controllers/userController"); const { protect } = require("../middleware/authMiddleware"); router.post("/", function (req, res) { registerUser; }); router.post("/auth", function (req, res) { authUser; }); router.post("/logout", function (req, res) { logoutUser; }); router .route("/profile") .get(protect, getUserProfile) .put(protect, updateUserProfile); module.export = router;
问题分析与修正:
- 路由回调写法错误:前面三个
router.post的匿名函数里,仅引用了控制器变量但未调用,也没把控制器函数作为有效回调传递给路由。Express需要的是能处理req和res的可执行回调,这种写法相当于传递了无逻辑的空函数,无法触发控制器的实际逻辑。 - 模块导出拼写错误:最后一行
module.export少了末尾的s,正确写法是module.exports。这个错误会导致整个路由模块无法被正确导入,Express找不到对应的路由处理函数,直接触发回调未定义的报错。
修正后的代码:
const express = require("express"); const router = express.Router(); const { authUser, registerUser, logoutUser, getUserProfile, updateUserProfile, } = require("../controllers/userController"); const { protect } = require("../middleware/authMiddleware"); // 直接将控制器函数作为回调传递(推荐写法) router.post("/", registerUser); router.post("/auth", authUser); router.post("/logout", logoutUser); router .route("/profile") .get(protect, getUserProfile) .put(protect, updateUserProfile); // 修正导出语句的拼写 module.exports = router;
如果一定要用匿名函数包裹控制器调用,需确保传递req和res参数:
router.post("/", function (req, res) { registerUser(req, res); });
内容的提问来源于stack exchange,提问作者jonteal
相关产品推荐
相关产品推荐

