我正在将 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 询问我的问题,但我也收到了无法正常工作的变体
这解决了我的问题
declare global {
namespace Express {
interface Request {
email: string
password: string
user?: JwtPayload
}
}
}