我正在使用 NextJS 中间件,可以从请求中获取
nextUrl
对象,其中包括路径名等内容,但如何从中间件中获取查询字符串参数?我可以看到它作为 href 返回的字符串的一部分返回,然后我可以自己解析它,但我想知道它是否在它自己的对象中返回?
例如
export const middleware = (request) => {
const { nextUrl: { query } } = request;
...
};
其中
query
等于
{
param1: 'foo',
param2: 'bar',
etc.
}
nextUrl
对象已包含 searchParams
,这是一个有效的 URLSearchParams
实例。
EG用途
export function middleware(req: NextRequest) {
if(req.nextUrl.searchParams.get('flag')) {
return NextResponse.rewrite('/feature);
}
}
正如@j-cue上面所说,但我还发现你可以从
search
得到nextUrl
。
例如
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());