在下面的代码中,我想用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英寸
1条答案
按热度按时间zzlelutf1#
Next.js中间件的工作方式与Express中间件不同,因为它只在导航上运行,而不是作为API端点的捕获器。
根据the documentation,您只能使用此功能访问cookie、访问/修改请求标头以及执行重定向和重写。