Next.js API路由中req.query对象未定义问题求助
Next.js API路由中req.query为undefined的解决方法
你的问题出在Next.js版本差异导致的API路由写法不同:如果你的项目用的是Next.js 13+的App Router(而非传统Pages Router),API路由接收的req是标准Web Request对象,它没有内置的query属性,这就是你拿到undefined的原因。
下面是两种可行的解决方式:
方式一:使用Next.js提供的NextRequest(推荐)
导入next/server中的NextRequest类型,通过nextUrl获取查询参数:
import { connectToDatabase } from '../../db/db_connection'; import { NextRequest } from 'next/server'; // 导入NextRequest export async function GET(req) { const datum = req.nextUrl.searchParams.get('datum'); // 获取查询参数 const connection = await connectToDatabase(); const query = `SELECT terminuhrzeit FROM termine WHERE termindatum = ?`; const [gebuchteTermine] = await connection.execute(query, [datum]); await connection.end(); const gebuchteZeiten = gebuchteTermine.map(termin => termin.terminuhrzeit); return new Response(JSON.stringify(gebuchteZeiten), { headers: { 'Content-Type': 'application/json' } }); }
方式二:使用标准Web API的URL对象
不需要额外导入,直接通过req.url构建URL实例来提取查询参数:
import { connectToDatabase } from '../../db/db_connection'; export async function GET(req) { const url = new URL(req.url); const datum = url.searchParams.get('datum'); // 从searchParams获取参数 const connection = await connectToDatabase(); const query = `SELECT terminuhrzeit FROM termine WHERE termindatum = ?`; const [gebuchteTermine] = await connection.execute(query, [datum]); await connection.end(); const gebuchteZeiten = gebuchteTermine.map(termin => termin.terminuhrzeit); return new Response(JSON.stringify(gebuchteZeiten), { headers: { 'Content-Type': 'application/json' } }); }
注意:你的前端代码完全没问题,URL参数传递正确,只需要修改API路由的参数获取逻辑即可。
内容的提问来源于stack exchange,提问作者Lukas Hyd
相关产品推荐
相关产品推荐

