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('./你的模块路径')
解决办法有两种:
- 调整导入方式,直接接收导出的函数:
const cookieJwtAuth = require('./你的模块路径')
- 调整第二种导出方式,保持和第一种一致的对象结构:
module.exports = { cookieJwtAuth }
内容的提问来源于stack exchange,提问作者Benzine
相关产品推荐
相关产品推荐

