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

如何修复[nodemon]应用崩溃及express-jwt的TypeError问题?

项目启动报错:TypeError: Object(...) is not a function

我和朋友协作开发项目时,执行npm run development命令启动项目,出现如下错误:

const requireSignin = Object(express_jwt__WEBPACK_IMPORTED_MODULE_2__["expressJwt"])({
                                                                                    ^

TypeError: Object(...) is not a function
    at Module.eval (webpack:///./server/controllers/auth.controller.js?:58:85)
    at eval (webpack:///./server/controllers/auth.controller.js?:95:30)
    at Module../server/controllers/auth.controller.js (/Users/mihailomitrovic/Downloads/iteh_projekat/dist/server.generated.js:420:1)
    at __webpack_require__ (/Users/mihailomitrovic/Downloads/iteh_projekat/dist/server.generated.js:21:30)
    at Module.eval (webpack:///./server/routes/user.routes.js?:5:86)
    at eval (webpack:///./server/routes/user.routes.js?:36:30)
    at Module../server/routes/user.routes.js (/Users/mihailomitrovic/Downloads/iteh_projekat/dist/server.generated.js:540:1)
    at __webpack_require__ (/Users/mihailomitrovic/Downloads/iteh_projekat/dist/server.generated.js:21:30)
    at Module.eval (webpack:///./server/express.js?:17:77)
    at eval (webpack:///./server/express.js?:165:30)
    at Module../server/express.js (/Users/mihailomitrovic/Downloads/iteh_projekat/dist/server.generated.js:468:1)
    at __webpack_require__ (/Users/mihailomitrovic/Downloads/iteh_projekat/dist/server.generated.js:21:30)
    at eval (webpack:///./server/server.js?:3:66)
    at Module../server/server.js (/Users/mihailomitrovic/Downloads/iteh_projekat/dist/server.generated.js:552:1)
    at __webpack_require__ (/Users/mihailomitrovic/Downloads/iteh_projekat/dist/server.generated.js:21:30)
    at eval (webpack:///multi_./server/server.js?:1:18)
[nodemon] app crashed - waiting for file changes before starting...

我已尝试查找解决方案并检查代码,但至今没有效果。请问这是否与模块导入有关?能否提供帮助或指明解决方向?

以下是报错指向的auth.controller.js代码:

import User from '../models/user.model'
import jwt from 'jsonwebtoken'
import { expressJwt } from 'express-jwt'
import config from './../../config/config'

const signin = async (req, res) => {
  try {
    let user = await User.findOne({
      "email": req.body.email
    })
    if (!user)
      return res.status('401').json({
        error: "User not found"
      })

    if (!user.authenticate(req.body.password)) {
      return res.status('401').send({
        error: "Email and password don't match."
      })
    }

    const token = jwt.sign({
      _id: user._id
    }, config.jwtSecret)

    res.cookie("t", token, {
      expire: new Date() + 9999
    })

    return res.json({
      token,
      user: {
        _id: user._id,
        name: user.name,
        email: user.email
      }
    })

  } catch (err) {

    return res.status('401').json({
      error: "Could not sign in"
    })

  }
}

const signout = (req, res) => {
  res.clearCookie("t")
  return res.status('200').json({
    message: "signed out"
  })
}

const requireSignin = expressJwt({
  secret: config.jwtSecret,
  userProperty: 'auth'
})

const hasAuthorization = (req, res, next) => {
  const authorized = req.profile && req.auth && req.profile._id == req.auth._id
  if (!(authorized)) {
    return res.status('403').json({
      error: "User is not authorized"
    })
  }
  next()
}

export default {
  signin,
  signout,
  requireSignin,
  hasAuthorization
}

解决方向

这个错误确实和模块导入有关,核心原因是express-jwt版本的导出方式变更:

  • express-jwt v4及以上版本采用默认导出,不再支持{ expressJwt }这种命名解构导入
  • 你的代码里用了解构导入,导致expressJwt是undefined,调用时就会抛出Object(...) is not a function错误

方案1:修改导入语句(推荐)

把auth.controller.js里的导入代码改成默认导入:

import expressJwt from 'express-jwt'

注意:v4+版本的配置参数也有变化,若启动后仍有报错,需把secret参数改成嵌套对象形式:

const requireSignin = expressJwt({
  secret: { secret: config.jwtSecret },
  userProperty: 'auth'
})

方案2:降级express-jwt版本

如果不想修改代码,可以降级到支持命名导出的v3.x版本:

npm uninstall express-jwt && npm install express-jwt@3.4.0

内容的提问来源于stack exchange,提问作者Mihailo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 01:01:51