express配置JWT鉴权出现TypeError:expressJwt not a function报错
expressJwt not a function 报错原因与修复
问题复现
Express项目接入JWT身份认证能力时,运行抛出TypeError: "expressJwt not a function"错误,原实现代码:
const expressJwt = require('express-jwt'); function authJwt(){ secret = process.env.secret; return expressJwt({ secret, algorithms: ["HS256"], }); } module.exports = authJwt;
报错原因
express-jwt v7.0.0及以上版本做了不兼容的API变更:
- 旧版本(v6.x及更早)将JWT中间件函数作为模块默认导出,可直接通过
require('express-jwt')获取函数调用 - 新版本改为命名导出,直接
require拿到的是模块整体对象,不是可执行函数;同时导出的中间件方法名改为小驼峰格式的expressjwt(首字母小写),原大驼峰命名的方法已不存在,因此调用时抛出类型错误。
修复方案
二选一即可:
方案1:适配新版本API(推荐)
调整导入方式,解构获取命名导出的方法,同时修正方法名大小写:
// 解构获取命名导出的expressjwt方法(注意首字母小写) const { expressjwt } = require('express-jwt'); function authJwt(){ // 补充变量声明,避免secret泄漏到全局作用域 const secret = process.env.secret; return expressjwt({ secret, algorithms: ["HS256"], }); } module.exports = authJwt;
额外提示:原代码中secret变量未加声明关键字,会污染全局作用域,修复时建议补充const声明。
方案2:降级到兼容旧写法的版本
如果不想调整现有代码,可将express-jwt降级到v6稳定版,执行以下安装命令:
npm install express-jwt@6.1.1
降级完成后原有代码无需修改即可正常运行。
内容的提问来源于stack exchange,提问作者Veasna Koeun
相关产品推荐
相关产品推荐

