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

TypeScript开发Next.js+Express应用遇Express调用重载匹配错误

解决Express异步中间件的TypeScript重载匹配错误

错误原因分析

Express的RequestHandler类型要求异步中间件返回Promise<void>,但你的isAuthenticated是async函数,且在代码中直接return res.status(...).json(...),这导致函数返回的是Promise<Response | undefined>,与类型要求不匹配,从而触发重载错误。

修复方案

移除所有返回响应对象的return语句,直接调用res的响应方法即可——Express中间件不需要返回响应对象,调用res.json()/res.status()等方法就会结束请求流程。

修改后的中间件代码:

import { NextFunction, Request, Response } from "express";
// 补充:需要引入jsonwebtoken库用于解码token
import jwt from "jsonwebtoken";

declare global {
    namespace Express{
        interface Request {
            id: string;
        }
    }
}

export const isAuthenticated = async (req: Request, res: Response, next: NextFunction) => {
    try {
        const token = req.cookies.token;
        if (!token) {
            // 直接调用响应方法,不返回响应对象
            res.status(401).json({
                success: false,
                message: "User not authenticated"
            });
            return; // 提前退出函数,避免后续代码执行
        }
      
        // 补充token解码逻辑(示例,需替换为你的密钥)
        const decoded = jwt.verify(token, process.env.JWT_SECRET!) as { userId: string };
        req.id = decoded.userId;
        next();
    } catch (error) {
        // 同样直接调用响应方法
        res.status(500).json({
            message: "Internal server error"
        });
        return;
    }
}

额外注意点

原代码中decode变量未定义,需补充JWT解码逻辑(如使用jsonwebtoken库的verify方法),否则运行时会出现变量未定义错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 18:05:03