MERN开发遇express-jwt导出错误:无default导出
MERN开发:解决express-jwt导出错误问题
错误信息
..\server\middlewares\index.js:1 import {expressJwt} from "express-jwt"; SyntaxError: The requested module '../server/node_modules/express-jwt/dist/index.js' does not provide an export named 'default' at Object.<anonymous> (..\server\middlewares\index.js:1) at Generator.next (<anonymous>) at Object.<anonymous> (..\server\routes\auth.js:1) at Generator.next (<anonymous>) at Object.Module._extensions..js (node:internal/modules/cjs/loader:1180:10) [nodemon] app crashed - waiting for file changes before starting...
相关代码
server/middlewares/index.js 原始代码
import expressJwt from "express-jwt"; export const requireSignin = expressJwt({ getToken: (req, res) => req.cookies.token, secret: process.env.JWT_SECRET, algorithms: ["HS256"], });
server/routes/auth.js 代码
import express from "express"; const router = express.Router(); // middleware import { requireSignin } from "../middlewares"; // controllers import { register, login, logout, currentUser } from "../controllers/auth"; router.post("/register", register); router.post("/login", login); router.get("/logout", logout); router.get("/current-user", requireSignin, currentUser); module.exports = router;
server/package.json
{ "name": "server", "version": "1.0.0", "main": "index.js", "scripts": { "start": "nodemon -r esm server.js" }, "keywords": [], "author": "", "license": "ISC", "dependencies": { "bcrypt": "^5.1.0", "cookie-parser": "^1.4.6", "cors": "^2.8.5", "csurf": "^1.11.0", "dotenv": "^8.6.0", "esm": "^3.2.25", "express": "^4.18.2", "express-jwt": "^7.7.7", "jsonwebtoken": "^8.5.1", "mongoose": "^5.13.15", "morgan": "^1.10.0", "nodemon": "^2.0.20" }, "description": "" }
已尝试的中间件格式
- 命名导入expressJwt
import {expressJwt} from "express-jwt"; export const requireSignin = expressJwt({ getToken: (req, res) => req.cookies.token, secret: process.env.JWT_SECRET, algorithms: ["HS256"], });
- 命名导入并默认导出requireSignin
import {expressJwt} from "express-jwt"; const requireSignin = expressJwt({ getToken: (req, res) => req.cookies.token, secret: process.env.JWT_SECRET, algorithms: ["HS256"], }); export default requireSignin;
解决方法
问题出在express-jwt v7+版本的导出命名变更:旧版本默认导出expressJwt,但v7之后改为命名导出expressjwt(注意是小写的j)。
修改server/middlewares/index.js代码如下:
import { expressjwt } from "express-jwt"; export const requireSignin = expressjwt({ getToken: (req) => req.cookies.token, secret: process.env.JWT_SECRET, algorithms: ["HS256"], });
说明
- express-jwt v7完全重构了API,导出名称从
expressJwt改为expressjwt - 保持其他配置参数不变(
getToken、secret、algorithms的用法和旧版本一致) - 不需要修改
routes/auth.js中的导入语句,因为我们依然是命名导出requireSignin
内容的提问来源于stack exchange,提问作者Sadi Mohammad Kabbo
相关产品推荐
相关产品推荐

