我具有客户端组件GetUserInfoButton.在该组件中,我在URL http://localhost:3000/test/users/[id]上发送了一个GET请求,其中[id]是一个类似MongoDB字母数字序列.

app/api/users/[id]/route.ts内,我希望接收该请求并使用该[id].以下是我的GetUserInfoButton个组成部分:

'use client';

export default function GetUserInfoButton({ id }: { id: string }) {
    const contentType = "application/json";
    const handleClick = async (id: string) => {
        try {
            const res = await fetch(`/api/users/${id}`, {
                method: "GET",
                headers: {
                    "Content-Type": contentType,
                }
            });
            if (!res.ok) {
                throw new Error(res.status.toString());
            }
        } catch (error) {
            console.log("error ===> ", error);
        }
    };

    return (
        <button onClick={() => handleClick(id)}>
            Get
        </button>
    );
}

这是我的route.ts%文件:

import { NextRequest, NextResponse } from "next/server";

export async function GET(req: NextRequest) {
    const id = req.url.split("http://localhost:3000/api/users/")[1];
    return NextResponse.json({
        success: true,
        id: id
    }, {
        status: 200,
    })
}

当它还是Pages路由时,我可以在客户机上使用useRouter(),并在服务器上获得id,如下所示: const { query: { id } } = req.

如何在服务器组件中获取id参数?

我使用的是Next.js 13.4.16.

推荐答案

app目录中,当您处于动态路由(也就是[id]文件夹)中时,将向您的API路由处理程序传递第二个对象参数,该参数将保存您的插件,如doc所示:

// app/api/users/[id]/route.ts

import { NextRequest, NextResponse } from "next/server";

export async function GET(req: NextRequest, { params }: { params: { id: string } }) {
  console.log(params.id);
  return NextResponse.json({ msg: "Hello World" });
}

下面是不带类型的版本:

// app/api/users/[id]/route.js

import { NextRequest, NextResponse } from "next/server";

export async function GET(req, { params }) {
  console.log(params.id);
  return NextResponse.json({ msg: "Hello World" });
}

对于future 的读者,您可以通过以下方式获取查询字符串(也称为?search=value):

import { NextResponse } from "next/server";

export async function GET(req) {
  const { searchParams } = new URL(req.url);
  console.log(searchParams.get("search"));
  return NextResponse.json({ msg: "Hello World" });
}

Javascript相关问答推荐

如何保持子画布元素的1:1宽高比?

如何修复内容安全策略指令脚本-SRC自身错误?

有Angular 的material .未应用收件箱中的价值变化

使用JavaScript重新排序行

如何在Javascript中使用Go和检索本地托管Apache Arrow Flight服务器?

数字时钟在JavaScript中不动态更新

无法检测卡片重叠状态的问题

我在我的Java代码中遇到了问题,代码的一部分看不到先前定义的对象

如何使onPaste事件与可拖动的HTML元素一起工作?

在运行时使用Next JS App Router在服务器组件中运行自定义函数

单个HTML中的多个HTML文件

同一类的所有div';S的模式窗口

让chart.js饼图中的一个切片变厚?

面对代码中的错误作为前端与后端的集成

我想使用GAS和HTML将从Electron 表格中获得的信息插入到文本字段的初始值中

顶点图使用组标签更新列之间的条宽

按特定顺序将4个数组组合在一起,按ID分组

我无法在Api Reaction本机上发出GET请求

如何在加载页面时使锚定标记成为焦点

如何用react组件替换dom元素?