为什么 req.query 在 NEXT.js 中无法按预期运行?

Why isn't req.query functioning as expected in NEXT.js?

提问人:Yash Yadav 提问时间:11/11/2023 最后编辑:Andrew ChungYash Yadav 更新时间:11/11/2023 访问量:48

问:

我在最新的NextJS App Router中有以下代码,在文件中app\api\products\route.tsx

import { initMongoose } from "@/lib/mongoose";
import Product from "@/models/products";
import { NextApiRequest } from "next";
import { NextResponse } from "next/server";

export async function GET(req: NextApiRequest,res: NextResponse) {
  await initMongoose();
  console.log("Query is ",req.query);
  return NextResponse.json( await Product.find().exec() )
}

但是,即使我使用查询参数命中终结点,它也会返回。Query is undefined

例:http://localhost:3000/api/products?abc=def

我想得到一个类似对象的东西:

{
   "abc" : "def"
}

我正在使用 NextJS 的 14 版和 TypeScript。

这不是“使用客户端”问题。

此外,端点正在工作,因为我在响应中获取了所有产品。

JavaScript reactjs next.js 路由器 next.js13

评论


答:

1赞 Octo Palm Tree 11/11/2023 #1

试试这个

import { initMongoose } from "@/lib/mongoose";
import Product from "@/models/products";
//import { NextApiRequest } from "next";
import { NextRequest, NextResponse } from "next/server";

export async function GET(req: NextRequest, res: NextResponse) {
  
  //console.log("Query is ",req.query);
  const searchParams = req.nextUrl.searchParams;
  const abc = searchParams.get('abc');
  console.log("Query is ", abc); 

  await initMongoose();

  return NextResponse.json(await Product.find().exec());
}

NextJSv13.4+ 从使用 NextAPIRequest 切换到使用 NextRequest。NextAPIRequest 派生自 Node 请求,而 NextRequest 更直接地派生自 Web API 请求。随着更改,帮助程序方法也发生了变化。

评论

1赞 Yash Yadav 11/11/2023
谢谢。这项工作。
0赞 Yash Yadav 11/11/2023
还有一个问题,当我安慰查询时,它以符号作为键示例:[Symbol(state)],知道它们是什么意思吗?