使用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
相关产品推荐
相关产品推荐

