javascript 无法读取Next.js 13中间件中的请求正文

zdwk9cvp  于 2022-12-21  发布在  Java
关注(0)|答案(1)|浏览(215)

在下面的代码中,我想用zod的schema验证请求主体,目前,它将失败并捕获,这是因为req.body返回的是ReadableStream<Uint8Array>,而不是它期望解析的对象。

export default async function middleware(req: NextRequest, res: NextResponse) {
  const { pathname } = req.nextUrl;
  if (pathname.startsWith('/api/user/create')) {
    try {
      createUserSchema.parse({
        body: req.body,
        params: req.nextUrl.searchParams,
      });
      return NextResponse.next();
    } catch (error: any) {
      console.log(req.body);
      return NextResponse.json(
        { success: false, message: error },
        { status: 422, headers: { 'content-type': 'application/json' } }
      );
    }
  }

  return NextResponse.next();
}

下面是console.log(req.body);的输出

<ref *1> ReadableStream {
  _state: 'readable',
  _reader: undefined,
  _storedError: undefined,
  _disturbed: false,
  _readableStreamController: ReadableStreamDefaultController {
  _controlledReadableStream: [Circular *1],
  _queue: S {
  _cursor: 0,
  _size: 0,
  _front: { _elements: [], _next: undefined },
  _back: { _elements: [], _next: undefined }
},
  _queueTotalSize: 0,
  _started: false,
  _closeRequested: false,
  _pullAgain: false,
  _pulling: false,
  _strategySizeAlgorithm: [Function],
  _strategyHWM: 1,
  _pullAlgorithm: [Function],
  _cancelAlgorithm: [Function]
}
}

我做了一些研究,发现我需要在这个ReadableStream上运行某种转换方法。问题是,其中大多数包括缓冲模块,它不能在边缘上运行,因此不能在middleware.ts中工作。是否有可能我可以使用的多边形填充?
x1米4英寸x1米5英寸

zzlelutf

zzlelutf1#

Next.js中间件的工作方式与Express中间件不同,因为它只在导航上运行,而不是作为API端点的捕获器。
根据the documentation,您只能使用此功能访问cookie、访问/修改请求标头以及执行重定向和重写。

相关问题