next.js 如何为POST请求解析ReadableStream?

nwo49xxi  于 2023-05-17  发布在  其他
关注(0)|答案(1)|浏览(264)

我正在尝试使用新的Nextjs 13 route handlers沿着使用TypeScript的Prisma创建一些基本的crud操作。
这就是我的POST请求处理程序的样子:

export async function POST(req: NextRequest) {
  const clientData: clientToCreate = req.body;

  try {
    const data = await prisma.client.create({
      data: clientData,
    });
    return NextResponse.json(data);
  } catch (e) {
    console.error(e);
    return NextResponse.error(e);
  }
}

这里的req.body是ReadableStream<Uint8Array> | null,我不知道如何解析它以访问其中的数据。当我尝试执行req.body.json()时,我得到:Property 'json' does not exist on type 'ReadableStream<Uint8Array>'
以下是我如何构造我的请求:

interface ApiRequest {
  url: string;
  method: "GET" | "POST" | "PUT" | "DELETE";
  params?: Object;
}

const getRequestUrl = (url: string) => {
  return `${process.env.BASE_API_URL}/${url}`;
};

const defaultHeaders = {
  Accept: "application/json; charset=UTF-8",
  "Content-Type": "application/json",
};

export const apiRequest = async (request: ApiRequest) => {
  return await fetch(getRequestUrl(request.url), {
    headers: defaultHeaders,
    method: request.method,
    body: request?.params ? JSON.stringify(request.params) : undefined,
  })
    .then((response) => response.json())
    .catch((e) => {
      console.error(e);
      throw e;
    });
};

然后我所做的就是使用postman来发送一个POST请求,该请求的头部与上面看到的头部完全相同。我的要求错了吗?我想不出是哪里出了错。
先谢谢你。

8aqjt8rx

8aqjt8rx1#

要获取正文内容:

const body = await request.json()

如果使用request.body,它将返回一个ReadableStream对象

相关问题