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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 05:22:17