Next.js 14中req.query无法正常工作的问题求助
解决Next.js 14 App Router API路由无法获取查询参数的问题
问题核心是你混用了Pages Router与App Router的API请求类型。在App Router的API路由中,GET函数接收的是Web标准的Request对象,而非Pages Router里的NextApiRequest,因此直接访问req.query会返回undefined。
修正步骤:
- 移除
NextApiRequest的导入,改用原生Request类型 - 通过
URLSearchParams解析请求URL中的查询参数
修正后的代码:
import { initMongoose } from "@/lib/mongoose"; import Product from "@/models/products"; import { NextResponse } from "next/server"; export async function GET(req: Request) { await initMongoose(); // 解析URL查询参数 const searchParams = new URL(req.url).searchParams; // 转换为预期的键值对对象 const queryObj = Object.fromEntries(searchParams.entries()); console.log("Query is ", queryObj); return NextResponse.json(await Product.find().exec()) }
补充说明:
new URL(req.url).searchParams会提取URL中的查询参数集合Object.fromEntries(searchParams.entries())将参数集合转为你需要的格式,比如访问?abc=def时,queryObj会是{ abc: "def" }- App Router的API路由无需
res参数,直接返回NextResponse即可
内容的提问来源于stack exchange,提问作者Yash Yadav
相关产品推荐
相关产品推荐

