You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 05:40:11