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

Node.js模块导出报错:Route.post()获取到undefined回调函数

Node.js模块导出方式导致路由错误的问题分析

我正在学习Node.js的多种模块导出方式,却遇到了问题。以下第一种导出方式可以正常运行:

const jwt = require('jsonwebtoken')

//Verify token
exports.cookieJwtAuth = (req, res, next) => {
    const token = req.cookies.token
    try {
        const user = jwt.verify(token, process.env.AUTH_SECRET)
        req.user = user
        next()
    } catch (err) {
        res.clearCookie('token')
        return res.redirect('/login')
    }
}

但改用以下方式导出时,出现错误:Error: Route.post() requires a callback function but got a [object Undefined]

const jwt = require('jsonwebtoken')

//Verify token
const cookieJwtAuth = (req, res, next) => {
    const token = req.cookies.token
    try {
        const user = jwt.verify(token, process.env.AUTH_SECRET)
        req.user = user
        next()
    } catch (err) {
        res.clearCookie('token')
        return res.redirect('/login')
    }
}

module.exports = cookieJwtAuth

请问第二种写法为何会抛出该错误,我哪里操作有误?


问题原因与解决办法

错误核心是导入方式和导出方式不匹配:

  • 第一种导出是给exports对象添加cookieJwtAuth属性,最终导出的是包含该方法的对象。
  • 第二种导出是直接把函数cookieJwtAuth作为模块的导出值,最终导出的是函数本身。

如果你的路由代码仍使用解构导入(如下),就会因找不到对应属性拿到undefined,触发路由错误:

const { cookieJwtAuth } = require('./你的模块路径')

解决办法有两种:

  1. 调整导入方式,直接接收导出的函数:
const cookieJwtAuth = require('./你的模块路径')
  1. 调整第二种导出方式,保持和第一种一致的对象结构:
module.exports = { cookieJwtAuth }

内容的提问来源于stack exchange,提问作者Benzine

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 21:00:04