You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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": ""
}

已尝试的中间件格式

  1. 命名导入expressJwt
import {expressJwt}  from "express-jwt";

export const requireSignin = expressJwt({
  getToken: (req, res) => req.cookies.token,
  secret: process.env.JWT_SECRET,
  algorithms: ["HS256"],
});
  1. 命名导入并默认导出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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 23:31:05