我使用的是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());