如何在NextJS中间件中获取查询字符串参数



我使用的是NextJS中间件,可以从请求中获取nextUrl对象,其中包括路径名等内容,但如何从中间件中获取查询字符串参数?我可以看到它作为href返回的字符串的一部分返回,然后我可以自己解析它,但我想知道它是否在自己的对象中返回?

例如

export const middleware = (request) => {
const { nextUrl: { query } } = request;
...
};

其中query等于

{
param1: 'foo',
param2: 'bar',
etc.
}

nextUrl对象已经包含searchParams,这是一个有效的URLSearchParams实例。

例如使用

export function middleware(req: NextRequest) {
if(req.nextUrl.searchParams.get('flag')) {
return NextResponse.rewrite('/feature);
}
}

正如@j-cue上面所说,但我也发现你可以从nextUrl中获得search

例如

export const middleware = (request) => {
const { nextUrl: { search } } = request;
const urlSearchParams = new URLSearchParams(search);
const params = Object.fromEntries(urlSearchParams.entries());
};

从Next.js 13.4开始,您可以从url中获得这样的搜索参数:

export const GET = async (request, { params }) => {
try{

// Path Params are received from {params} variable
//You can receive search params as below:
// UrlPath = `/api/prompt/${post._id.toString()}?type=DELETE`
//The search params [type, method] for above url
const {type, method} = Object.fromEntries(request.nextUrl.searchParams);
console.log(type, method);
if(type === "DELETE" && method === "GET"){
//Perform an action
}
return new Response("Action performed", {status: 200});
}
catch(err){
console.log(err);
}
}

您可能只想从一个位置提取它:

const urlSearchParams = new URLSearchParams(window.location.search);
const params = Object.fromEntries(urlSearchParams.entries());

最新更新