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

使用JWT实现Node.js登录时出现Route.post()回调未定义错误

排查Express中Route.post() requires a callback function but got a [object Undefined]错误

错误场景

使用JWT实现Node.js登录功能时触发该错误,错误堆栈指向user.route.js第8行的POST路由定义。

核心原因

从错误信息和代码片段来看,问题本质是路由文件中传入Route.post()的处理函数为undefined,最常见的触发原因:

  • 导出/导入时的拼写错误:你的代码中导出的是singIn(拼写缺失字母l,正确应为signIn),如果路由文件里导入的是signIn,会导致找不到对应函数,最终传入Route.post()的就是undefined。
  • 函数未正确导出:比如导出语句语法错误,或者路由文件导入的文件路径不正确。

解决步骤

1. 修正函数导出的拼写错误

将导出的函数名改为正确的signIn,同时修复代码里的其他小问题:

module.exports.signIn = async (req, res) => {
  const { email, password } = req.body

  try {
    const user = await UserModel.login(email, password)
    const token = createToken(user._id)
    // 补充maxAge的具体数值,示例为24小时(毫秒单位)
    res.cookie('jwt', token, { httpOnly: true, maxAge: 24 * 60 * 60 * 1000 });
    res.status(200).json({ user: user._id })
  } catch (error) {
    // 错误响应建议用4xx状态码,符合HTTP语义
    res.status(401).json({ error: error.message });
  }
}

2. 确保路由文件正确导入函数

在user.route.js中,确认导入的函数名和导出的名称完全匹配:

const express = require('express');
const router = express.Router();
// 这里的signIn要和控制器文件中导出的名称一致
const { signIn } = require('../controllers/user.controller');

// 确保第二个参数是有效函数,而非undefined
router.post('/login', signIn);

3. 额外检查点

  • 确认createToken函数已正确定义并导入,避免后续出现新的未定义错误。
  • 检查控制器文件的导入路径是否正确,确保路由文件能找到对应的处理函数。

内容的提问来源于stack exchange,提问作者tiako cedrick deco

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 05:41:26