Express 中的 Express 中间件(typescript)

问题描述 投票:0回答:1

我正在将 ExpressJS 应用程序的后端重写为 Typescript。在 auth.routes.ts 中,我遇到了与中间件(authMiddleware)相关的错误。据我了解,存在输入错误,因为 js 扩展中的同一文件工作正常。

请帮我解决这个问题。

下面是对应的代码


auth.routes.ts

import { Router } from "express"
import authMiddleware from "../middleware/auth.middleware"
import authController from "../controllers/authController"

const router = Router()

router.get("/", authMiddleware, authController.auth)

export default router

auth.middleware.ts


import "dotenv/config"
import { NextFunction, Response } from "express"
import jwt, { JwtPayload, Secret } from "jsonwebtoken"
import { CustomHeaders } from "../models"

const secretKey: Secret = process.env.secretKey as Secret

interface AuthRequest extends Request {
  user?: JwtPayload
}

function authMiddleware(req: AuthRequest, res: Response, next: NextFunction) {
  if (req.method === "OPTIONS") {
    next()
  }

  try {
    const token = (req.headers as CustomHeaders).authorization?.split(" ")[1]

    if (!token) {
      return res.status(401).json({ message: "Unauthorized" })
    }
    const decoded: JwtPayload = jwt.verify(token!, secretKey) as JwtPayload
    req.user = decoded

    next()
  } catch (error) {
    return res.status(400).json({ message: "Bad Request" })
  }
}

export default authMiddleware


错误描述:

没有重载与此调用匹配。 最后一次超载出现以下错误。 类型参数 '(req: AuthRequest, res: Response>, next: NextFunction) => Response> | undefined' 不可分配给'RequestHandlerParams>' 类型的参数。 输入 '(req: AuthRequest, res: Response>, next: NextFunction) => Response> | undefined' 不可分配给类型'RequestHandler>'。 参数“req”和“req”的类型不兼容。 类型“Request>”缺少类型“AuthRequest”中的以下属性:缓存、凭据、目标、完整性和 13 个其他属性。ts(2769)

我尝试向 chatGPT 询问我的问题,但我也收到了无法正常工作的变体

javascript typescript express middleware
1个回答
0
投票

这解决了我的问题

declare global {
  namespace Express {
    interface Request {
      email: string
      password: string
      user?: JwtPayload
    }
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.