这是中间件文件中的代码:

import { NextResponse } from "next/server";
import type { NextRequest } from "next/server";

// This function can be marked `async` if using `await` inside
export function middleware(request :    NextRequest) {
    const path = request.nextUrl.pathname;
    const isPublicPath = path === '/login' || path === '/signup';
    const token = request.cookies.get('token')?.value || '';
    if (isPublicPath && token) {
        return NextResponse.redirect(new URL('/', request.nextUrl));
    }
    if (!isPublicPath && !token) {
        return NextResponse.redirect(new URL('/login', request.nextUrl));
    }
}

// See "Matching Paths" below to learn more
export const config = {
    matcher: ['/','/profile', 'login', '/signup'],
};

错误是

source不以/不是路由{"source":"登录"}开头

错误:找到无效的中间件

有什么办法解决这个问题吗?

推荐答案

The documentation明确指定匹配器路径必须以/开头(实际上在文档中是大写的):

已配置匹配器:

  1. 必须以/开头

因此,只需添加缺失的/:

export const config = {
    matcher: ['/','/profile', '/login', '/signup'],
                              ☝️ HERE
};

Typescript相关问答推荐

等待的R没有用响应对象展开到R

打字脚本中泛型和直接类型重新映射的不同行为

类型{}上不存在属性&STORE&A;-MobX&A;REACT&A;TYPE脚本

TypeScrip 5.3和5.4-对`Readonly<;[...number[],字符串]>;`的测试版处理:有什么变化?

是否存在类型联合的替代方案,其中包括仅在某些替代方案中存在的可选属性?

ApexCharts条形图未显示最小值.负值

MatTool提示在角垫工作台中不起作用

AngularJS服务不会解析传入的Json响应到管道中的模型

为什么我在这个重载函数中需要`as any`?

对象类型的TypeScrip隐式索引签名

类型';字符串|数字';不可分配给类型';未定义';.类型';字符串';不可分配给类型';未定义';

类型脚本-在调用期间解析函数参数类型

如何在Angular 服务中制作同步方法?

为什么特定的字符串不符合包括该字符串的枚举?

可赋值给类型的类型,从不赋值

如何在Angular /字体中访问API响应的子元素?

为什么看起来相似的代码在打字时会产生不同的错误?

对象只能使用 Typescript 中另一个对象的键

在 next.js 13.4 中为react-email-editor使用forwardRef和next/dynamic的正确方法

从接口推断模板参数?