使用Deno Oak处理Post请求时解析form-data/JSON报错求助
问题描述
我用Deno搭配Oak和Deno KV开发一个S3服务克隆项目,解析Post请求form-data里的文件或base64文本时总是报错:Uncaught (in promise) Error: Caught error from readSlice()withoutpartial property
测试短字符串能正常解析,但用JSON传相同内容也会报同样的错;传base64字符串则触发另一个错误:
error: Uncaught (in promise) Interrupted: operation canceled const ab = await this.#request.arrayBuffer();
我的处理器代码是:
const body = await ctx.request.body({ type: "form-data" }); const data = await body.value.read();
解决方案
1. 修正form-data读取逻辑
Oak的form-data解析需要通过迭代器完整读取所有片段,不要直接调用read(),改用循环遍历:
const body = await ctx.request.body({ type: "form-data" }); const formData = new FormData(); for await (const part of body.value) { if (part.name && part.value) { formData.append(part.name, part.value); } } // 正常获取数据示例 const file = formData.get("file"); const base64Content = formData.get("base64Content");
2. 解决请求中断问题
出现operation canceled通常是请求超时或读取不完整导致,可做以下调整:
- 增加Oak的请求超时配置:
const app = new Application({ serverConstructor: { timeout: 30000, // 设为30秒,可根据业务需求调整 }, });
- 确保客户端发送请求时未提前断开(比如测试时不要中途取消Postman请求)。
3. 校验请求头
确认请求的Content-Type严格为multipart/form-data且包含正确的边界(boundary),部分客户端可能未自动生成边界值,会导致解析失败。
内容的提问来源于stack exchange,提问作者Miguelo
相关产品推荐
相关产品推荐

