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

问题描述 投票:0回答:4

我正在使用 NextJS 中间件,可以从请求中获取

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

例如

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

其中

query
等于

{
  param1: 'foo',
  param2: 'bar',
  etc.
}
javascript next.js middleware
4个回答
21
投票

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

EG用途

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

4
投票

正如@j-cue上面所说,但我还发现你可以从

search
得到
nextUrl

例如

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

0
投票

从 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);
   }
}

-2
投票

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

const urlSearchParams = new URLSearchParams(window.location.search);
const params = Object.fromEntries(urlSearchParams.entries());
© www.soinside.com 2019 - 2024. All rights reserved.