TypeError: expressJWT is not a function
一、问题描述
注册 JWT 字符串解析还原成 JSON 对象的中间件 express-jwt,最后跑程序时报错:TypeError: expressJWT is not a function
二、报错原因
express-jwt 包的版本过高,在高版本中使用了低版本的语法
三、问题解决方法
1、第一种方法就是将当前使用的 express-jwt 包的版本降低
参考方法:将 pakage.json 中的 express-jwt 版本改为 6.1.1,再在终端执行 npm i 就可以了。
2、第二种方法就是使用当前 express-jwt 包版本的最新语法
//导入 express-jwt 包
const { expressJWT:expressJWT } = require("express-jwt")
//全局注册
//.unless({用正则指定不需要访问权限的路径})
app.use(expressJWT({ secret: 'shhhhhhared-secret', algorithms: ['HS256'] }).unless({ path:[/^\/api\//] }))
更详细的最新语法请查询官方文档可知:https://www.npmjs.com/package/express-jwt
三、获取用户数据
token 解析成功后,就会将 token 中包含的用户数据自动挂载到 req.auth 上 (注意:这里有的用的是 user,如果用 user 不成功的就用 auth)
// 这是一个有权限的 API 接口
app.get('/admin/getinfo', function (req, res) {
// TODO_05:使用 req.auth 获取用户信息,并使用 data 属性将用户信息发送给客户端
console.log(req.auth);
res.send({
status: 200,
message: '获取用户信息成功!',
data: req.auth// 要发送给客户端的用户信息
})
})