Node.js TypeError:expressJWT is not a function问题求助
问题:TypeError: expressJWT is not a function
我是Node.js新手,遇到一个无法理解的错误。以下是相关配置和代码:
package.json配置
{"name": "pangolinapp","version": "1.0.0","description": "","main": "index.js","scripts": {"test": "echo \"Error: no test specified\" && exit 1"},"keywords": [],"author": "","license": "ISC","dependencies": {"bcryptjs": "^2.4.3","body-parser": "^1.20.1","chai": "^4.3.6","cookie-parser": "^1.4.6","cors": "^2.8.5","crypto": "^1.0.1","dotenv": "^16.0.3","express": "^4.18.2","express-jwt": "^7.7.7","express-validator": "^6.14.2","formidable": "^2.1.1","joi": "^17.7.0","jsonwebtoken": "^8.5.1","lodash": "^4.17.21","mongoose": "^6.7.0","multer": "^1.4.5-lts.1","passport": "^0.6.0","passport-local": "^1.0.0","uuid": "^9.0.0"}}
auth.js中间件代码
const expressJWT = require("express-jwt");require('dotenv').config(); exports.requireSignIn = expressJWT({secret: process.env.JWT_SECRET,algorithms: ["HS256"],userProperty: 'auth' }) exports.isAuth = (req, res, next) => { let user = req.profile && req.auth && (req.profile._id == req.auth._id) if(!user) {return res.status(403).json({error: "Acess denied"}) } const jwt = require('jsonwebtoken');next()} exports.isAdmin = (req, res, next) => {if(req.auth.role == 0 ){return res.status(403).json({error: "Admin resource, access denied"})}next()}
报错信息
exports.requireSignIn = expressJWT({ ^TypeError: expressJWT is not a function
我已导入express-jwt模块并尝试用其创建中间件,且参考了官方文档,但仍无法解决该问题,请求帮助。
解决方案
问题出在express-jwt的版本导出方式上:你安装的是v7.7.7版本,该版本不再默认导出核心函数,而是通过expressjwt属性暴露。
修改auth.js的导入语句即可解决:
// 解构赋值导入,推荐写法 const { expressjwt: expressJWT } = require("express-jwt"); // 或者直接取属性 // const expressJWT = require("express-jwt").expressjwt;
修改后原有的requireSignIn配置无需改动,就能正常调用expressJWT函数生成中间件。
如果后续想使用ES模块写法,可以在package.json中添加"type": "module",然后用以下方式导入:
import { expressjwt } from 'express-jwt';
内容的提问来源于stack exchange,提问作者Kame_Sensei
相关产品推荐
相关产品推荐

