Next.js中间件里怎么获取请求的URL路径?
我在写Next.js的middleware时,想根据用户访问的路径做不同处理,但不知道怎么拿到当前请求的URL路径。试了request.url,结果是个完整URL,还要自己解析,有没有更直接的方法?
比如我想判断是不是访问/admin开头的路径,现在只能这样写:
import { NextRequest, NextResponse } from 'next/server';
export function middleware(request: NextRequest) {
const url = new URL(request.url);
if (url.pathname.startsWith('/admin')) {
// 处理逻辑
}
return NextResponse.next();
}
感觉有点啰嗦,官方有没有更简洁的API?
NextRequest自带的nextUrl属性。这玩意儿已经是解析好的 URL 对象了,直接拿来用就行,不用自己再 new 一个。改完之后是这样的:
request.nextUrl和你自己new URL(request.url)的区别在于,前者是 Next.js 帮你处理好的,包含了 pathname、searchParams 这些常用属性,直接访问就行。顺便说一句,如果你这个中间件只针对
/admin路径生效,更省事的做法是在配置里直接用 matcher 过滤,连 if 判断都省了:这样中间件只会匹配
/admin开头的请求,代码里就不用写路径判断了。 matcher 支持路径模式匹配,写法灵活,具体语法翻翻文档就行。