使用express-jwt已配置secret仍报secret should be set错误求助
问题解答
首先明确:外层的async自执行函数不是导致该报错的原因。
报错根因
你使用了express-jwt v7及以上的版本,该版本做了破坏性更新,和v6及之前版本的导入、调用方式不兼容:
v7+版本不再支持直接通过const jwtExpress = require('express-jwt')导入调用函数,直接require得到的是一个模块对象而非可执行函数,你传入的配置参数没有被正确接收,因此内部读取options.secret时读到的是undefined,触发报错。
解决方法
两种方案二选一即可:
- 方案一:降级到兼容的v6版本
执行安装命令:npm install express-jwt@6
安装完成后现有代码无需修改即可正常运行。 - 方案二:适配v7+版本的语法
将express-jwt的导入语句修改为:
const { expressjwt: jwtExpress } = require('express-jwt')
其余配置逻辑保持不变即可。
额外注意事项
你的代码中混用了CommonJS的require语法和ES Module的import语法,如果你的package.json中没有配置"type": "module",后续运行会触发导入语法错误,建议统一使用同一种模块规范:
- 如果用CommonJS:将redis和UserApi的导入改为
require写法 - 如果用ES Module:将所有
require改为import写法,同时在package.json中添加"type": "module"配置
内容的提问来源于stack exchange,提问作者natey
相关产品推荐
相关产品推荐

